Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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
Tags more
Archives
Today
Total
관리 메뉴

작은 지식주머니

백준 파이썬 14891 톱니바퀴 본문

백준 python 기록

백준 파이썬 14891 톱니바퀴

작지 2022. 4. 11. 03:05

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