본문 바로가기

Problem Solving/BOJ 문제풀이

6064 카잉 달력

728x90

www.acmicpc.net/problem/6064

 

6064번: 카잉 달력

입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터는 한 줄로 구성된다.

www.acmicpc.net

육십갑자의 확장판 문제.

M = 10, N = 12 인 경우는 육십갑자의 방식과 같다. (10개의 천간, 12개의 지지)

총 경우의 수는 M과 N의 최소공배수 만큼이다.

따라서 육십갑자의 모든 경우의 수는 10과 12의 최소공배수인 60이다.

 

처음에는 최소공배수를 구해서 그만큼 돌리다가 안나오면 -1, 나오면 출력을 하려고 했으나...

그냥 배열로 중복을 체크하면서, x는 고정시킨 채 y가 나오는 해를 구할 때까지 m년만큼 지내고 중복이 발생하면 바로 -1을 출력하는 방식으로 답을 구했다.

 

 

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
32
33
34
35
36
37
38
39
#include <bits/stdc++.h>
using namespace std;
#define swap(a,b) (a)^=(b)^=(a)^=(b)
#define endl '\n'
typedef long long lld;
 
int main()
{
    ios_base::sync_with_stdio(NULL);
    cin.tie(NULL);
    cout.tie(NULL);
    int tc;
    cin >> tc;
    while(tc--)
    {
        int m, n, x, y;
        cin >> m >> n >> x >> y;
        x--; y--;
        vector<bool> check(n, false);
        int tmp = x%n, cnt = x+1;
        while(1)
        {
            if(check[tmp])
            {
                cout << -1 << endl;
                break;
            }
            check[tmp] = true;
            if(tmp == y)
            {
                cout << cnt << endl;
                break;
            }
            cnt += m;
            tmp = (tmp+m)%n;
        }
    }
    return 0;
}
cs

 

728x90

'Problem Solving > BOJ 문제풀이' 카테고리의 다른 글

1238 파티  (0) 2021.05.05
4779 칸토어 집합  (0) 2021.05.05
1202 보석 도둑  (0) 2021.04.27
16928 뱀과 사다리 게임  (0) 2021.04.26
9019 DSLR  (0) 2021.04.25