티스토리 뷰
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
링크
TAG
- 게리맨더링
- Stack
- 백트래킹
- java
- 백준
- 래퍼 클래스
- 2529
- 순열
- Regex
- recursion
- gof
- 4796
- 프로그래머스
- OOP
- 제네릭
- 조합
- 재귀
- 알고리즘
- 신규아이디추천
- CS
- 구간 합 구하기
- 하노이 탑
- Wrapper Class
- generic
- 15686
- 디자인 패턴
- 와일드카드
- 11659
- BFS
- 11729
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함