반응형
문제 출처 :
https://www.acmicpc.net/problem/14891
알고리즘 분석 :
문제 해결에 필요한 사항
1. Deque
2. 구현
간단하게 덱과 재귀를 이용을 하면 해결이 가능한 문제이다.
이 문제는 문제 풀이보다 문제를 이해하는데 더 어려운 것 같다.
현재 톱니바퀴가 시계방향으로 도는지 반시계 방향으로 도는지 확인 후,
현재 톱니바퀴의 양 옆 톱니바퀴가 서로 다른 극이면 돌려주고 그게 아니라면 그대로 유지하는 방식을 이용하면 된다.
소스 코드 :
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 96 97 98 99 | #include <iostream> #include <cstdio> #include <deque> using namespace std; deque<int> dq[5]; void clockWise(int here) { int tmp = dq[here][7]; dq[here].pop_back(); dq[here].push_front(tmp); } void counterClockWise(int here) { int tmp = dq[here][0]; dq[here].pop_front(); dq[here].push_back(tmp); } void left(int here, bool clock) { if (!(1 <= here && here <= 4)) return; if (dq[here][2] != dq[here + 1][6]) { left(here - 1, !clock); if (clock) clockWise(here); else counterClockWise(here); } else return; } void right(int here, bool clock) { if (!(1 <= here && here <= 4)) return; if (dq[here][6] != dq[here - 1][2]) { right(here + 1, !clock); if (clock) clockWise(here); else counterClockWise(here); } } int main() { for (int i = 1; i <= 4; i++) for(int j = 0 ; j < 8; j ++) { int val; scanf("%1d", &val); dq[i].push_back(val); } int t; scanf("%d", &t); while (t--) { int n, clock; scanf("%d %d", &n, &clock); if (clock == -1) clock = 0; if (clock) { left(n - 1, !clock); right(n + 1, !clock); clockWise(n); } else { left(n - 1, !clock); right(n + 1, !clock); counterClockWise(n); } } int ans = 0; for (int i = 0; i < 4; i++) dq[i + 1][0] ? ans += 1 << i : 0; printf("%d", ans); return 0; } // This source code Copyright belongs to Crocus // If you want to see more? click here >> | Crocus |
반응형
'Applied > 알고리즘 문제풀이' 카테고리의 다른 글
[14715번] 전생했더니 슬라임 연구자였던 건에 대하여 (Easy) (0) | 2017.11.10 |
---|---|
[3022번] 식사 예절 (0) | 2017.11.10 |
[5558번] 치~즈 (0) | 2017.10.25 |
[3186번] 소변기 (0) | 2017.10.25 |
[14888번] 연산자 끼워넣기 (0) | 2017.10.25 |