작은 지식주머니
백준 파이썬 14891 톱니바퀴 본문
https://www.acmicpc.net/problem/14891
14891번: 톱니바퀴
총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴
www.acmicpc.net
간만에 정말 재밌게 풀었던 문제였습니다.
기본적으로 DFS를 사용해서 문제풀이를 진행하였습니다.
target과 direction을 정하고나서
해당 target에 연관된 모든 톱니바퀴를 dfs를 통해서 위치변환을 마치고 마지막으로
처음 정한 target의 톱니바퀴를 변경시켜 문제풀이를 하였습니다.
from collections import deque
wheel = []
for i in range(4):
wheel.append(deque(list(map(int, input()))))
TC = int(input())
def dfs(target, direction):
visited[target] = 1
if direction == -1:
if 0 <= target - 2 and visited[target-1] == 0:
if wheel[target - 1][6] != wheel[target - 2][2]:
dfs(target - 1, 1)
wheel[target - 2].appendleft(wheel[target - 2].pop())
if target < 4 and visited[target+1] == 0:
if wheel[target - 1][2] != wheel[target][6]:
dfs(target + 1, 1)
wheel[target].appendleft(wheel[target].pop())
if direction == 1:
if 0 <= target - 2 and visited[target-1] == 0:
if wheel[target - 1][6] != wheel[target - 2][2]:
dfs(target - 1, -1)
wheel[target - 2].append(wheel[target - 2].popleft())
if target < 4 and visited[target+1] == 0:
if wheel[target - 1][2] != wheel[target][6]:
dfs(target + 1, -1)
wheel[target].append(wheel[target].popleft())
for i in range(TC):
target, direction = map(int, input().split())
visited = [0 for _ in range(5)]
dfs(target, direction)
if direction == -1:
wheel[target - 1].append(wheel[target - 1].popleft())
else:
wheel[target-1].appendleft(wheel[target-1].pop())
result = 0
for i in range(4):
if wheel[i][0] == 1:
result += 2**i
print(result)
'백준 python 기록' 카테고리의 다른 글
백준 파이썬 17298 오큰수 (0) | 2022.04.12 |
---|---|
백준 파이썬 후위 표기식2 (0) | 2022.04.11 |
백준 파이썬 1041 주사위 (0) | 2022.04.08 |
백준 파이썬 11048 이동하기 (0) | 2022.04.05 |
백준 파이썬 6593 상범 빌딩 (0) | 2022.02.26 |
Comments