찌로그
[BOJ] 백준 14891번 톱니바퀴 2020_05_22 C++ 본문
https://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 | #include <bits/stdc++.h> using namespace std; typedef pair<int, int> p; int gear[4][8]; vector<p> rotation; // 1 : clock wise, -1 : counter CW int k, answer=0; void rot(int num, int dir){ if(dir == 1){ int temp = gear[num][7]; for(int i=6; i>=0; i--){ gear[num][i+1] = gear[num][i]; } gear[num][0] = temp; }else if (dir == -1){ int temp = gear[num][0]; for(int i=1; i<8; i++){ gear[num][i-1] = gear[num][i]; } gear[num][7] = temp; } } void solve(){ for(int i=0; i<k; i++){ int num = rotation[i].first-1, dir = rotation[i].second; int dirs[4]={0,}; dirs[num] = dir; if(num == 0){ for(int a=0; a<3; a++){ if(gear[a][2] == gear[a+1][6]) break; else dirs[a+1] = dir * pow(-1,a+1); } }else if(num == 1){ if(gear[0][2] != gear[1][6]) dirs[0] = (-1) * dir; if(gear[1][2] != gear[2][6]){ dirs[2] = (-1) * dir; if(gear[2][2] != gear[3][6]) dirs[3] = dir; } }else if(num == 2){ if(gear[3][6] != gear[2][2]) dirs[3] = (-1) * dir; if(gear[2][6] != gear[1][2]){ dirs[1] = (-1) * dir; if(gear[0][2] != gear[1][6]) dirs[0] = dir; } }else{ for(int a=3; a>=0; a--){ if(gear[a][6] == gear[a-1][2]) break; else dirs[a-1] = dir * pow(-1,a+2); } } for(int a=0; a<4; a++) rot(a,dirs[a]); } } void sum(){ for(int i=0; i<4; i++){ if(gear[i][0] == 1) answer += (1 << i); } cout << answer<<endl; } void input(){ // string a; for(int i=0; i<4; i++){ // cin >> a; for(int j=0; j<8; j++){ int a; scanf("%1d", &a); gear[i][j] = a; } } cin >> k; for(int i=0; i<k; i++){ int x, y; cin >> x >>y; rotation.push_back({x,y}); } } int main(){ input(); solve(); sum(); return 0; } | cs |
'Coding' 카테고리의 다른 글
[프로그래머스] level2 프린터 2020_05_29 Python3 (0) | 2020.05.29 |
---|---|
[BOJ] 백준 15683번 감시 2020_05_26 C++ (0) | 2020.05.26 |
[BOJ] 백준 14890번 경사로 2020_05_22 C++ (0) | 2020.05.22 |
[BOJ] 백준 17825번 주사위 윷놀이 2020_05_21 C++ (0) | 2020.05.21 |
[BOJ] 백준 17822번 문제 원판 돌리기 2020_05_19 C++ (0) | 2020.05.19 |
Comments