본문 바로가기

알고리즘/SW EXPERT

4583. 세븐 카드 섞기 게임

4583. 세븐 카드 섞기 게임


문제 자체가 쉬워보였지만, K값이 10^12 이기 때문에 시간을 단축하는게 아주 중요한 문제라고 생각했다.


그래서 어떤 규칙이 있을까 생각해보다가, 단순하게 따로 수학적인 규칙이나 증명이 있을 수 없을 것 같다고 생각을 했다.


그렇다면 문제의 조건에서 풀기 위해서는 반드시 맨 처음의 값이 카드를 섞으면서 다시 중복해서 나와야한다고 생각했다. 그래야지 그때를 


기준으로 K값을 나머지 연산으로 줄여 풀 수 있기 때문이었다.


그래서 while 문을 통해서 맨 첫번째 0123456 이 아닌, 그 다음 0123456 이 존재하는지 여부를 확인하고 그 때의 값을 m2에 저장하였다. 


그리고 while 문을 빠져나오면 K를 m2 로 나눈 나머지 값으로 변경시켜준다. 


그리고 위의 while 문을 동일하게 수행하되 K 를 감소하면서 0이 될때까지 수행하면 결과를 얻을 수 있다.


단 조심할 점은 K 를 int 형으로 처음에 선언해서 런타임에러가 발생했다는 점!


<정답 코드>


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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include<iostream>
 
using namespace std;
 
int main()
{
    //freopen("input.txt", "r", stdin);
    int tc;
    cin >> tc;
 
    for (int t = 1; t <= tc; t++)
    {
        int num[8= { 0,0,1,2,3,4,5,6 };
        int op[20][2];
        int M;
        long long K;
        cin >> M >> K;
        
        for (int i = 0; i < M; i++)
            cin >> op[i][0>> op[i][1];
 
 
        int m = 0;
        long long m2 = 0;
        while (true)
        {
            if (m == M)
                m = 0;
 
            if (m2 != 0 && m == 0 && num[1== 0 && num[2== 1 && num[3== 2 && num[4== 3 && num[5== 4 && num[6== 5)
                break;
            
 
            int tmp = num[op[m][0]];
            num[op[m][0]] = num[op[m][1]];
            num[op[m][1]] = tmp;
 
            m++;
            m2++;
        }
 
        K = K % m2;
        m = 0;
 
        while (K--)
        {
            if (m == M)
                m = 0;
 
 
            int tmp = num[op[m][0]];
            num[op[m][0]] = num[op[m][1]];
            num[op[m][1]] = tmp;
 
            m++;
        }
 
        cout << "#" << t << " ";
        for (int i = 1; i <= 7; i++)
            cout << num[i];
 
        cout << endl;
 
    }
 
    return 0;
}
cs


반응형

'알고리즘 > SW EXPERT' 카테고리의 다른 글

3184번  (0) 2018.10.08
4534. 트리 흑백 색칠  (0) 2018.10.06
5432. 쇠막대기 자르기  (0) 2018.10.06
5648. 원자 소멸 시뮬레이션  (0) 2018.10.04
5653. 줄기세포배양  (2) 2018.10.02