https://www.acmicpc.net/problem/14891
14891번: 톱니바퀴
총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴
www.acmicpc.net
'''
14891번: 톱니바퀴 / gold 5 / 구현, 시뮬레이션
'''
import sys
from collections import deque
input = sys.stdin.readline
# 톱니바퀴 입력받기
graph = deque()
for i in range(4):
case = deque(input().rstrip())
graph.append(case)
# 회전 입력받기
move = []
# 시뮬레이션
K = int(input())
for _ in range(K):
move_num, move_dir = map(int, input().split())
move_num -= 1
move_dir_rev = move_dir * -1
move_graph = []
move_graph.append((move_num, move_dir))
# 움직일 톱니바퀴의 왼쪽 체크
for i in range(move_num - 1, -1, -1):
if graph[i][2] != graph[i + 1][6]:
move_graph.append((i, move_dir_rev))
move_dir_rev *= -1
else:
break
# 움직일 톱니바퀴의 오른쪽 체크
move_dir_rev = move_dir * -1
for i in range(move_num + 1, 4):
if graph[i - 1][2] != graph[i][6]:
move_graph.append((i, move_dir_rev))
move_dir_rev *= -1
else:
break
# 톱니바퀴 움직이기
for index, dir in move_graph:
if dir == 1:
graph[index].appendleft(graph[index].pop())
else:
graph[index].append(graph[index].popleft())
# 결과값 출력하기
res = 0
point = [1, 2, 4, 8]
for i in range(4):
if graph[i][0] == '1':
res += point[i]
print(res)
코드 리뷰
- 해당 문제를 푸는데 약 40분 소요되었고, 정답 판정을 받았습니다.
- 톱니바퀴 번호와 방향을 입력 받으면, 다른 톱니 바퀴들도 체크를 하도록 구현 했습니다.
- 조건에 맞게 움직여야 할 톱니바퀴들, 방향을 리스트에 넣어 체크
- 그 후, 움직여야 할 톱니바퀴 리스트 활용하여 움직입니다.
'백준 문제풀이' 카테고리의 다른 글
| 17136번: 색종이 붙이기 / gold 2 / 백트래킹 (0) | 2023.06.26 |
|---|---|
| 13023번: ABCDE / gold 5 / 백트래킹 (0) | 2023.06.20 |
| 2583번: 영역 구하기 / silver 1 / DFS (0) | 2023.06.13 |
| 3085번: 사탕 게임 / silver 2 / 브루트포스 (0) | 2023.06.10 |
| 4991번: 로봇 청소기 / gold 1 / BFS, 백트래킹 (0) | 2023.06.03 |