IT 프로그래밍/백준

C++ 백준 1075 나누기

기술1 2024. 5. 14. 15:52
반응형

문제`

 

 

풀이

#include <iostream>
using namespace std;

int main()
{
	int N, F;

	cin >> N >> F;

	N = (N / 100) * 100;

	for (int i = 0; i < 100; i++)
	{
		int temp = N + i;
		if (temp % F == 0)
		{
			if (i < 10)
			{
				cout << "0" << i << endl;
				return 0;
			}
			else
			{
				cout << i << endl;
				return 0;
			}
		}
	}

	
}

먼저 풀이가 선뜻 떠오르진 않을 것입니다. 생각하는 과정이 조금 필요했던 문제라는 생각이 들어요. 브론즈 문제지만 조금은 시간이 필요했습니다.

 

해당 문제는 N의 마지막 두 자리 수를 더했을 때 F로 나누어 떨어지는 수를 찾는 문제인데요. 이것을 해결하기 위해선 N을 변형해주는 과정이 필요합니다. 마지막 두 자리 수를 00으로 만들어준 다음에 0부터 99까지 차례로 올라가면서 F로 나누어 떨어지는 값을 출력해주는 것을 목표로 합니다.

 

왜냐하면 최소값을 구해야 하기 때문에 for문을 통해 위쪽으로 올라가면서 처음 나오는 값을 출력하면 간단하게 구할 수 있기 때문입니다. 

 

따라서 N에 마지막 두 자리 수를 0으로 바꿔주기 위해선 100으로 나눈 다음 또 다시 100을 곱하면 자연스럽게 마지막  두 자리는 00으로 설정됩니다.

 

이후 0부터 99까지 반복하면서 각 숫자에 수정된 N을 더해보고 그 결과가 F로 나누어 떨어지는지 확인한 후 그 숫자를 찾으면 

 

1. 10보다 작은 경우 앞에 0을 붙여서 출력

2. 10보다 클 경우 해당 숫자 그대로 출력

 

그리고 각 부분이 나온다면 바로 return 0을 통해 종료되게 코드를 구성했습니다. 

반응형