[Python] BOJ 14891 - 톱니바퀴

728x90
반응형

https://www.acmicpc.net/problem/14891

 

14891번: 톱니바퀴

총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴

www.acmicpc.net

# 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
반응형
TAGS.

Comments