[Python] BOJ 14891 - 톱니바퀴
728x90
반응형
https://www.acmicpc.net/problem/14891
# 2017 하반기 삼성SW 역량테스트 문제이다.
# 단순 구현, 시뮬레이션 문제라 어렵지 않았다.
# 톱니바퀴도 4개로 고정이고, 톱니개수도 8개여서 그냥 브루트포스형식으로 풀면된다.
import sys
from collections import deque
input = sys.stdin.readline
gear = {}
for i in range(4):
gear[i+1] = deque(input().rstrip())
def check(a, b):
return a != b
for _ in range(int(input())):
num, dir = map(int,input().split())
# 각 톱니마다 회전방향을 저장하는 배열 turn
turn = [0,0,0,0,0]
turn[num] = dir
# 처음에 1번 톱니가 회전하는 경우
if num == 1:
# 1번과 2번의 맞닿은 극이 다른 경우 2번의 회전방향 1번과 반대로 지정
# 맞닿은 극이 같은경우 그 뒤로 2,3,4번 모두 회전 안하므로 고려할 필요 x
if check(gear[1][2], gear[2][6]):
turn[2] = -dir
# 2번과 3번의 맞닿은 극이 다른경우 3번의 회전방향을 2번과 반대로 지정
if check(gear[2][2], gear[3][6]):
turn[3] = dir
# 3번과 4번의 맞닿은 극이 다른경우 4번의 회전방향을 3번과 반대로 지정
if check(gear[3][2], gear[4][6]):
turn[4] = -dir
# 처음에 2번 톱니가 회전하는 경우
elif num == 2:
# 1번-2번, 2번-3번의 관계는 '독립적'이므로 if문 나란하게 2개 사용
if check(gear[1][2], gear[2][6]):
turn[1] = -dir
# 2번-3번, 3번-4번은 종속적이므로 if문 안에 if문 사용
if check(gear[2][2], gear[3][6]):
turn[3] = -dir
if check(gear[3][2], gear[4][6]):
turn[4] = dir
# 처음에 3번 톱니가 회전하는 경우 (2번과 같다)
elif num == 3:
if check(gear[3][2], gear[4][6]):
turn[4] = -dir
if check(gear[2][2], gear[3][6]):
turn[2] = -dir
if check(gear[1][2], gear[2][6]):
turn[1] = dir
# 처음에 4번 톱니가 회전하는 경우 (1번과 같다)
elif num == 4:
if check(gear[3][2], gear[4][6]):
turn[3] = -dir
if check(gear[2][2], gear[3][6]):
turn[2] = dir
if check(gear[1][2], gear[2][6]):
turn[1] = -dir
# 1번톱니부터 turn[i]가 1이면 시계방향으로 한 칸 회전 / -1이면 반시계방향으로 한 칸 회전
for i in range(1, 5):
if turn[i] == 1:
gear[i].rotate(1)
elif turn[i] == -1:
gear[i].rotate(-1)
# N극 0, S극 1
# 최종적으로 4개의 톱니바퀴 점수의 합 계산 후 출력
dab = 0
for i in gear:
if gear[i][0] == '1':
dab += 2**(i-1)
print(dab)
(solved.ac 티어: 골드 5)
728x90
반응형
'문제풀이 > BaekjoonOnlineJudge' 카테고리의 다른 글
[Python] BOJ 2660 - 회장뽑기 (0) | 2021.06.27 |
---|---|
[Python] BOJ 17779 - 게리맨더링 2 (0) | 2021.06.27 |
[Python] BOJ 19238 - 스타트 택시 (0) | 2021.06.26 |
[Python] BOJ 14503 - 로봇 청소기 (0) | 2021.06.25 |
[Python] BOJ 1504 - 특정한 최단 경로 (0) | 2021.06.22 |
TAGS.