반응형
https://www.acmicpc.net/problem/14891
저 긴 글에서 '문제에 필요한 조건'을 정확히 찾아내고 구현해야 하는 시뮬레이션 문제.
시계 방향 / 반시계 방향으로 값을 회전시켜야 하기 때문에, 양 끝에서 값을 빼고 넣는 게 가능한 deque를 사용했다.
문제의 조건을 요약하자면
1. 처음 톱니바퀴가 움직이기 전에, 인접한 톱니바퀴가 움직일 수 있는지 없는지를 전부 검사한 뒤에야 톱니바퀴를 움직일 수 있다.
2. 인접한 톱니바퀴의 인접한 톱니바퀴도 전부 검사해야 한다. ex) 2번 톱니바퀴 -> 3번 톱니바퀴 검사 -> 3번 톱니바퀴와 인접한 4번도 검사
3. '회전 여부'를 결정짓는 '인접한 톱니바퀴의 톱날'은 index 2번과 6번이다.
4. 주어진 톱니바퀴는 일단 회전하는 것이 전제되어 있다. 인접 톱니바퀴가 전부 회전하지 않는다 해도, 처음 주어진 톱니바퀴는 반드시 회전해야만 한다.
5. 인접한 톱니바퀴는 주어진 톱니바퀴와 반대 방향으로 회전해야 한다.
4번 때문에 문제를 푸는 데 너무 오래 걸렸다. 인접 톱니바퀴가 움직일 수 없다면, 처음 주어진 톱니바퀴도 움직이지 않는 걸로 이해하고 코드를 만들었기 때문이다.
회전 자체는 deque의 rotate 함수를 사용하면 된다. 시계 방향은 1, 반시계 방향은 -1을 파라미터로 넣으면 된다.
반응형
'프로그래밍 > 코딩테스트 문제풀이' 카테고리의 다른 글
[Python] 프로그래머스. 징검다리 (Level 4) (0) | 2020.01.07 |
---|---|
[Python] 프로그래머스. 멀리 뛰기 (Level 3) (0) | 2020.01.06 |
[Python] 백준 17135. 캐슬 디펜스 (0) | 2020.01.04 |
[Python] 백준 17070. 파이프 옮기기 1 (0) | 2020.01.03 |
[Python] 백준 1316. 그룹 단어 체커 (0) | 2020.01.02 |