혼자 정리

6064번: 카잉 달력 본문

알고리즘 문풀/백준

6064번: 카잉 달력

tbonelee 2021. 8. 9. 13:38

문제링크

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