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


1. 문제 이해


 이 문제를 풀면서 하나 깨닳은 것은 문제 이해가 개인적으로 정말 중요하다는것을 느꼈습니다....

 뱀문제와 마찬가지로 시뮬레이션 문제 입니다.


2. 접근 방법


[1 단계] 입력되는 dir변수에 따라서 시계방향으로 돌지, 반 시계방향으로 돌지 정하게 됩니다.


[2 단계] 왼쪽, 오른쪽을 검사하여 서로 다른 값이 있다면 반대방향으로 돌려주고, 

                                   서로 같은 값이 있다면 돌려 움직이지 않습니다.


=> 저같은 경우는 이 부분을 왼쪽 오른쪽 으로 나눠서 재귀로 작성하였습니다.


cf> 이 부분에서 논리적으로 잘못생각하여 시간이 꽤 걸렸습니다.

 돌리기전에 양옆을 먼저 확인하여 옆 톱니가 움직이는지 여부를 먼저 결정해줘야 합니다!!!


[3 단계] 12시 방향에 있는것들의 가중치를 곱해 답을 출력합니다.


3. 문제 해결


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
68
69
#include <cstdio>
 
using namespace std;
 
int res;
int gear[5][8];
 
void rotate_gear(int n, int d) {
    if (d == 1) {            // 시계방향
        int tmp = gear[n][7];
        for (int i = 6; i >= 0; i--) {
            gear[n][i + 1= gear[n][i];
        }
        gear[n][0= tmp;
    }
    else if (d == -1) {        // 반 시계 방향
        int tmp = gear[n][0];
        for (int i = 1; i < 8; i++) {
            gear[n][i - 1= gear[n][i];
        }
        gear[n][7= tmp;
    }
}
 
void move_right(int n, int d) {
    if (!(1 <= n && n <= 4)) return;
 
    if (gear[n - 1][2!= gear[n][6]) {
        d = (d == 1) ? -1 : 1;
        move_right(n + 1, d);
        rotate_gear(n, d);
    }
}
 
void move_left(int n, int d) {
    if (!(1 <= n && n <= 4)) return;
 
    if (gear[n][2!= gear[n + 1][6]) {
        d = (d == 1) ? -1 : 1;
        move_left(n - 1, d);
        rotate_gear(n, d);
    }
}
 
int main() {
    for (int i = 1; i < 5; i++) {
        for (int j = 0; j < 8; j++) {
            scanf("%1d"&gear[i][j]);
        }
    }
 
    int k;
    scanf("%d"&k);
 
    for (int i = 0; i < k; i++) {
        int bun, dir;
        scanf("%d %d"&bun, &dir);
 
        move_left(bun - 1, dir);
        move_right(bun + 1, dir);
 
        rotate_gear(bun, dir);
    }
 
    res = gear[1][0+ (2 * gear[2][0]) + (4 * gear[3][0]) + (8 * gear[4][0]);
 
    printf("%d\n", res);
    return 0;
}
cs


'Algorithm > solution' 카테고리의 다른 글

#2178. 미로탐색  (0) 2018.12.24
#14503. 로봇 청소기  (1) 2018.01.22
#14502. 연구소  (4) 2018.01.16
#1953. [모의 SW 역량테스트] 탈주범 검거  (0) 2018.01.07
#1759. 암호 만들기  (0) 2017.12.29

+ Recent posts