Silver 1
문제
14891번: 톱니바퀴
총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴
www.acmicpc.net
문제 풀이
주어진 회전 동작들을 순서대로 입력받고 마지막 동작이 끝나고 점수를 계산하여 출력한다.
회전이 진행되기 전의 톱니바퀴 상태를 기준으로 인접한 톱니바퀴의 값이 같은지 확인해야 한다. 2번째와 6번째 톱니의 값을 비교하면 된다. (나는 처음에 회전 후에 하는 걸로 이해했었다.. 왜지,,?)
회전 방법으로 주어진 톱니바퀴를 기준으로 오른쪽과 왼쪽 톱니바퀴들의 회전 방향을 리스트에 저장해준다.
deque의 rotate를 이용해 회전 방향대로 모두 회전 시킨다.
회전이 모두 완료되면 주어진 방식으로 점수를 계산하여 출력한다.
코드
from collections import deque
gear = []
for _ in range(4):
gear.append(deque(input()))
n = int(input())
order = []
for _ in range(n):
order.append(list(map(int, input().split())))
# 톱니바퀴 동작
for o in order:
num, base_rotation = o[0]-1, o[1]
rotation = [0, 0, 0, 0]
rotation[num] = base_rotation
# 오른쪽 톱니바퀴들
for i in range(num+1, 4, 1):
# 같으면 멈추고
if gear[i][6] == gear[i-1][2]:
break
# 다르면 방향 반대로
rotation[i] = rotation[i-1] * -1
# 왼쪽 톱니바퀴들
for i in range(num-1, -1, -1):
# 같으면 멈추고
if gear[i][2] == gear[i+1][6]:
break
# 다르면 방향 바꿔서 회전
rotation[i] = rotation[i+1] * -1
# 정해진 방향으로 회전
for i in range(4):
gear[i].rotate(rotation[i])
# 점수 계산
score = 0
if gear[0][0] == '1':
score += 1
if gear[1][0] == '1':
score += 2
if gear[2][0] == '1':
score += 4
if gear[3][0] == '1':
score += 8
print(score)
728x90
'Algorithm > Problem' 카테고리의 다른 글
[Baekjoon] 21610번 : 마법사 상어와 비바라기 - Python (0) | 2022.02.11 |
---|---|
[Baekjoon] 14500 : 테트로미노 - Python (0) | 2022.02.10 |
[Baekjoon] 15683번 : 감시 - Python (0) | 2022.02.04 |
[Baekjoon] 20055번 : 컨베이어 벨트 위의 로봇 - Python (0) | 2022.02.04 |
[Baekjoon] 2565번 : 전깃줄 (0) | 2022.01.25 |