백준 14891 - 톱니바퀴
백준 14891 - 톱니바퀴
https://www.acmicpc.net/problem/14891
구현 문제였다. 간단했지만 코드가 너무 지저분해 보인다.. 회전방향을 정해주는 곳을 다담어야 겠다. 나의 로직은 이렇다 우선 주어진 기준이 되는 톱니바퀴를 기준으로 회전가능한 톱니바퀴 번호와 회전 방향을 구하고 톱니바퀴를 회전 시켜주었다. 회전로직은 deque를 이용하여 시계방향 회전일 경우 톱니바퀴의 맨 뒤를 pop해주고 큐 앞에 넣어주면 된다.
1234 -> 4123
반시계방향일 경우 톱니바퀴의 맨 앞을 빼서 뒤에 넣어주면 된다.
1234 -> 2341
"""
14891 - 톱니바퀴
"""
from collections import deque
gear = []
for _ in range(4):
data = list(map(int,input()))
gear.append(data)
# 확인 할게
# 1번 톱니의 2번 인덱스(3)와 2번 톱니의 6번 인덱스(7)
# 2번톱니의 2번인덱스(3)와 3번톱니의 6번인덱스(7)
# 3번톱니의 2번인덱스(3)와 4번톱니의 6번인덱스(7)
# 둘이 같지 않으면 회전x 같다면 현재 톱니의 회전에 반대회전
k = int(input())
spin = []
for _ in range(k):
data = list(map(int, input().split()))
# 0은 회전 기준 톱니, 1은 회전방향 -> -1 시계반대, 1 시계
spin.append((data[0],data[1]))
def get_spin_number(base_num,dir):
tmp = []
dd = []
tt = dir
if base_num == 1:
if gear[0][2] != gear[1][6]:
dd.append(-1*dir)
dir = -1*dir
tmp.append(2)
if gear[1][2] != gear[2][6]:
dd.append(-1*dir)
dir = -1*dir
tmp.append(3)
if gear[2][2] != gear[3][6]:
dd.append(-1*dir)
tmp.append(4)
elif base_num == 2:
if gear[0][2] != gear[1][6]:
dd.append(-1*dir)
tmp.append(1)
if gear[1][2] != gear[2][6]:
dd.append(-1*dir)
dir = -1*dir
tmp.append(3)
if gear[2][2] != gear[3][6]:
dd.append(-1*dir)
tmp.append(4)
elif base_num == 3:
if gear[1][2] != gear[2][6]:
dd.append(-1*dir)
dir = -1*dir
tmp.append(2)
if gear[0][2] != gear[1][6]:
dd.append(-1*dir)
tmp.append(1)
if gear[2][2] != gear[3][6]:
dd.append(-1*tt)
tmp.append(4)
elif base_num == 4:
if gear[2][2] != gear[3][6]:
dd.append(-1*dir)
dir = -1*dir
tmp.append(3)
if gear[1][2] != gear[2][6]:
dd.append(-1*dir)
dir = -1*dir
tmp.append(2)
if gear[0][2] != gear[1][6]:
dd.append(-1*dir)
tmp.append(1)
return tmp,dd
def spin_gear(start_num, dir):
spin_number,spin_dir = get_spin_number(start_num,dir)
# 시작 톱니 회전
tmp = gear[start_num-1]
q = deque(tmp)
if dir == 1: #시계방향
tt = q.pop()
q.appendleft(tt)
else: # 반시계 앞에꺼 때서 뒤로
tt = q.popleft()
q.append(tt)
gear[start_num-1] = list(q)
# 회전시킬 톱니 회전
for i in range(len(spin_number)):
tmp = gear[spin_number[i]-1]
q = deque(tmp)
if spin_dir[i] == 1: #시계방향
tt = q.pop()
q.appendleft(tt)
else: # 반시계 앞에꺼 때서 뒤로
tt = q.popleft()
q.append(tt)
gear[spin_number[i]-1] = list(q)
for t_number, sp in spin:
spin_gear(t_number,sp)
answer = gear[0][0] + gear[1][0] * 2 + gear[2][0] * 4 + gear[3][0] * 8
print(answer)
Author And Source
이 문제에 관하여(백준 14891 - 톱니바퀴), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@beomsun/백준-14891-톱니바퀴저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)