https://www.acmicpc.net/problem/14891
'''
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 |