혼자 정리
6064번: 카잉 달력 본문
C++
#include <iostream>
using namespace std;
int T, M, N, x, y;
int ret;
int gcd(int a, int b){
while (b > 0){
int r = a % b;
a = b;
b = r;
}
return (a);
}
int lcm(int a, int b){
return (a * b / gcd(a, b));
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> T;
for (int i = 0; i < T; i++){
cin >> M >> N >> x >> y;
ret = -1;
int tmp = x;
int cnt = x;
for (int j = 0; j < N; j++){
int yy;
if (tmp % N == 0)
yy = N;
else
yy = tmp % N;
if (yy == y)
break;
cnt += M;
tmp = yy + M;
}
if (cnt < lcm(M, N))
cout << cnt << "\n";
else
cout << -1 << "\n";
}
}
- x값을 기준으로 카운트를 M씩 증가시켜 가면서 원하는 숫자가 있는지 체크하는 방식
- 카운트의 upper bound는 M과 N의 최소공배수
- 유클리드 호제법 사용
- $O(lcm(M, N)) / M$
'알고리즘 문풀 > 백준' 카테고리의 다른 글
11403번: 경로 찾기 (0) | 2021.08.09 |
---|---|
11724번: 연결 요소의 개수 (0) | 2021.08.09 |
11727번: 2×n 타일링 2 (0) | 2021.08.08 |
11659번: 구간 합 구하기 4 (0) | 2021.08.08 |
9375번: 패션왕 신해빈 (0) | 2021.08.08 |