※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 12971번 문제인 숫자 놀이이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/12971 

 

12971번: 숫자 놀이

공백으로 구분된 6개의 정수 P1, P2, P3, X1, X2, X3가 순서대로 주어진다. 모든 숫자는 1과 300사이의 정수다.

www.acmicpc.net

 

어떤 P1P2P3로 나눈 나머지가 각각 X1,  X2,  X3인 수 N이 존재한다고 가정해보자. 이때 NP1P2P3보다 크다면 NP1P2P3 또한 위의 성질을 만족함을 쉽게 알 수 있다. 따라서 문제의 답이 존재한다면 1부터 P1P2P3까지의 수중에서 항상 찾을 수 있고, 여기에서 답을 찾지 못했다면 -1을 출력해 문제를 해결할 수 있다.

 

문제의 제약조건에 따라 P1P2P3은 2700만 이하이므로 1부터 P1P2P3까지의 정수를 하나하나 확인하는 브루트포스로 이 문제를 충분히 빠르게(2초 이내로) 해결할 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int P1, P2, P3, X1, X2, X3;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> P1 >> P2 >> P3 >> X1 >> X2 >> X3;
	for (int i = 1; i < 30000000; i++) {
		if (i % P1 != X1) continue;
		if (i % P2 != X2) continue;
		if (i % P3 != X3) continue;
		cout << i;
		return 0;
	}
	cout << -1;
}
728x90

+ Recent posts