문제링크 : https://www.acmicpc.net/problem/14891
from collections import deque
info = [deque(list(map(int, input()))) for _ in range(4)]
k = int(input())
def rotate(num, dis):
visit[num] = True
if 0 <= num-1:
if not visit[num-1] and (info[num][6] != info[num-1][2]):
rotate(num-1, -dis)
if num+1 < 4:
if not visit[num+1] and (info[num][2] != info[num+1][6]):
rotate(num+1, -dis)
info[num].rotate(dis)
for _ in range(k):
num, dis = map(int, input().split())
visit = [False for _ in range(4)]
rotate(num-1, dis)
# 점수 계산
res = 0
for i in range(4):
if info[i][0] == 1:
res += 2**i
print(res)
해설 : deque의 rotate만 알면 간단한 문제이다.
- visit체크를 하지않으면 recurssion error가 발생한다.
- 서로 붙어있는 톱니바퀴의 극성이 다를때만 rotate 함수를 재귀적으로 돌려주면된다.
- 같으면 톱니가 돌아가지 않기 때문에 그 이후는 고려할 필요가 없다.
'Algorithm > Python' 카테고리의 다른 글
[백준] 17142 연구소3 (1) | 2024.03.07 |
---|---|
[백준] 13549 숨바꼭질 (0) | 2024.03.02 |
[백준] 3055 탈출 (0) | 2024.02.03 |
[백준] 2467 용액 (0) | 2023.10.24 |
[백준] 18428 감시피하기 (0) | 2023.10.23 |