Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

사고쳤어요

[백준] 1075 나누기 (C++) 본문

백준/Bronze

[백준] 1075 나누기 (C++)

kevinmj12 2023. 1. 11. 04:04
 

1075번: 나누기

첫째 줄에 N, 둘째 줄에 F가 주어진다. N은 100보다 크거나 같고, 2,000,000,000보다 작거나 같은 자연수이다. F는 100보다 작거나 같은 자연수이다.

www.acmicpc.net

문제

두 정수 N과 F가 주어진다. 지민이는 정수 N의 가장 뒤 두 자리를 적절히 바꿔서 N을 F로 나누어 떨어지게 만들려고 한다. 만약 가능한 것이 여러 가지이면, 뒤 두 자리를 가능하면 작게 만들려고 한다.

예를 들어, N=275이고, F=5이면, 답은 00이다. 200이 5로 나누어 떨어지기 때문이다. N=1021이고, F=11이면, 정답은 01인데, 1001이 11로 나누어 떨어지기 때문이다.

입력

첫째 줄에 N, 둘째 줄에 F가 주어진다. N은 100보다 크거나 같고, 2,000,000,000보다 작거나 같은 자연수이다. F는 100보다 작거나 같은 자연수이다.

출력

첫째 줄에 마지막 두 자리를 모두 출력한다. 한자리이면 앞에 0을 추가해서 두 자리로 만들어야 한다.


풀이

먼저 N을 100으로 나눈 값의 몫에 100을 곱한 값을 구한다. 예를 들어 275의 경우 275 → 2 → 200이 나오게 된다. 그리고 앞선 값을 Q라 할 때 Q + R (R은 100보다 작은 자연수) 을 F로 나누어 떨어지게 하는 가장 작은 R의 값이 출력값이 된다. 만약 Q가 F로 나누어 떨어진다면 R의 값은 00이고, 그 이외에 가장 작은 R의 값은 Q + F - ((Q + F) mod F) 를 통해 구할 수 있다. 

코드

#include <iostream>
using namespace std;

int main(){
    int N, F, Q, R;
    cin >> N;
    cin >> F;

    Q = N / 100 * 100;

    if (!(Q % F)){ // Q가 F로 나누어 떨어질 때
        cout << 0 << 0;
    }
    else{ // Q가 F로 나누어 떨어지지 않을 때
        R = (Q + F - ((Q + F)%F)) % 100;
    
        if (R < 10){ // 한자리 수일 때 앞에 0을 붙임
            cout << 0 << R;
        }
        else{
            cout << R;
        }
    }
}

'백준 > Bronze' 카테고리의 다른 글

[백준]팰린드롬수(c++)  (0) 2023.07.08
[백준] 1076 저항 (C++)  (1) 2023.01.17
[백준] 1009 분산처리 (C++)  (0) 2023.01.10