728x90
반응형
https://www.acmicpc.net/problem/14891
14891번: 톱니바퀴
총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴
www.acmicpc.net
문제 해결
- 특정한 하나의 톱니바퀴를 돌릴 때 다른 톱니바퀴가 돌아가는지 안돌아가는지 조건에 맞춰서 확인한다.
- 결국 중요한 것은 12시 방향의 값이 N극인지 S극인지이다.
- 돌아갈때 한번에 모두 돌아가는 것이므로 조건에 맞춰서 이웃하는 바퀴가 반대방향으로 돌아가는지 안돌아가는지 확인한다음 안들아가면 다음 톱니바쿼는 볼 필요가 없고 돌아가면 다음 톱니바퀴를 쭉 확인한다.
- 단순 구현 문제이다.
CODE
import sys
input = sys.stdin.readline
def move_left(n, d):
if n == 1:
return
if T[n][6] == T[n - 1][2]:
return
turn[n - 1] = (-1) * d
move_left(n - 1, turn[n - 1])
def move_right(n, d):
if n == 4:
return
if T[n][2] == T[n + 1][6]:
return
turn[n + 1] = (-1) * d
move_right(n + 1, turn[n + 1])
if __name__ == "__main__":
T = [[]]
A = list(map(int, list(str(input().rstrip()))))
T.append(A)
B = list(map(int, list(str(input().rstrip()))))
T.append(B)
C = list(map(int, list(str(input().rstrip()))))
T.append(C)
D = list(map(int, list(str(input().rstrip()))))
T.append(D)
answer = 0
k = int(input())
for _ in range(k):
num, dir = map(int, input().split())
turn = [0] * (5)
turn[num] = dir
if num > 1:
move_left(num, dir)
if num < 4:
move_right(num, dir)
for i in range(1, 5):
if turn[i] == -1:
x = T[i].pop(0)
T[i].append(x)
elif turn[i] == 1:
x = T[i].pop()
T[i].insert(0, x)
for i in range(1, 5):
if T[i][0] == 1:
answer += pow(2, i - 1)
print(answer)
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 16236 아기 상어 (0) | 2023.05.29 |
---|---|
[python] 백준 3954 Brainf**k 인터프리터 (0) | 2023.05.28 |
[python] 백준 14499 주사위 굴리기 (0) | 2023.05.18 |
[python] 백준 2923 숫자 게임 (0) | 2023.05.16 |
[python] 백준 1736 쓰레기 치우기 (0) | 2023.05.13 |
댓글