티스토리 뷰

알고리즘/백준

[JAVA] 백준 14891번

코딩가딩 2021. 3. 16. 01:35

www.acmicpc.net/problem/14891

 

14891번: 톱니바퀴

총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴

www.acmicpc.net

 

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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
 
public class 톱니바퀴_bj_14891 {
    
    static int[][] wheels = new int[4][8];    // 톱니바퀴 상태
    static int[] turnDir = new int[4];        // 톱니바퀴를 회전시킬 방향 -1:역방향, 0:회전X, 1:시계방향
    
    static int K, sum;
 
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        // 톱니바퀴 상태
        for(int i=0; i<4; i++) {
            String temp = br.readLine();
            
            for(int j=0; j<8; j++) {
                wheels[i][j] = temp.charAt(j)-48;
            }
        }
        
        // 톱니바퀴 회전 횟수
        K = Integer.parseInt(br.readLine());
        
        // 회전 방법
        for(int i=0; i<K; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int wheelNum = Integer.parseInt(st.nextToken())-1;    // 톱니바퀴 index 때문에 -1해줌
            int dir = Integer.parseInt(st.nextToken());
            
            // 회전시킬 톱니바퀴 index에 회전 방향을 설정
            turnDir[wheelNum] = dir;
            
            // 회전시킬 톱니바퀴 왼쪽 톱니바퀴 탐색
            int temp = wheelNum;
            while(temp-1>=0) {
                if(wheels[temp][6!= wheels[temp-1][2]) {
                    turnDir[temp-1= turnDir[temp]*-1;
                } else turnDir[temp-1= 0;
                temp--;
            }
            
            // 회전시킬 톱니바퀴의 오른쪽 톱니바퀴 탐색
            temp = wheelNum;
            while(temp+1<4) {
                if(wheels[temp][2!= wheels[temp+1][6]) {
                    turnDir[temp+1= turnDir[temp]*-1;
                } else turnDir[temp+1= 0;
                temp++;
            }
            
            // 톱니바퀴 회전
            for(int j=0; j<4; j++) {
                if(turnDir[j] == -1) {
                    reverse(j);
                } else if(turnDir[j] == 1) {
                    turn(j);
                }
            }
            
        }
        
        // 점수계산 N극이면 0점, S극이면 2^i점
        for(int i=0; i<4; i++) {
            if(wheels[i][0== 1)    sum+=Math.pow(2, i);
        }
        
        // 결과 출력
        System.out.println(sum);
    }
    
    // 시계 방향 회전
    static void turn(int num) {
        int temp = wheels[num][7];
        
        for(int i=6; i>=0; i--) {
            wheels[num][i+1= wheels[num][i];
        }
        wheels[num][0= temp; 
    }
    
    // 시계 반대 방향 회전
    static void reverse(int num) {
        int temp = wheels[num][0];
        
        for(int i=1; i<8; i++) {
            wheels[num][i-1= wheels[num][i];
        }
        wheels[num][7= temp;
    }
 
}
 
cs

 

 

 

'알고리즘 > 백준' 카테고리의 다른 글

[JAVA] 백준 11659번  (0) 2021.12.13
[JAVA] 백준 17471번  (0) 2021.03.24
[JAVA] 백준 14501번  (0) 2021.03.10
[JAVA] 백준 11653번  (0) 2021.03.03
[JAVA] 백준 4796번  (0) 2020.11.06
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
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
글 보관함