For Programmer
백준 15662번 파이썬 문제풀이(톱니바퀴(2)) 본문
728x90
https://www.acmicpc.net/problem/15662
(문제가 너무 길어 링크로 대체합니다.....)
구현문제이나 조금 생각을 많이 해봐야하는 문제입니다.
저는 톱니바퀴끼리의 관계를 True, False로 저장하여 True면 돌 수 없도록 하였고 False면 돌 수 있도록 처리하였습니다. 자세한 설명은 주석으로 달아 놨습니다.
# 움직이지 못하는 톱니바퀴 저장
# [1-2] = True, [2-3] = True 와 같은 방식으로 저장
def dont_move():
dont_move = [False] * (T - 1)
# 비교
for i in range(T - 1):
if wheel[i][2] == wheel[i + 1][6]:
dont_move[i] = True
return dont_move
# 톱니바퀴 회전
def move(wheel, dir):
if dir == 1:
wheel[0], wheel[1], wheel[2], wheel[3], \
wheel[4], wheel[5], wheel[6], wheel[7] = wheel[7], wheel[0], wheel[1], wheel[2], \
wheel[3], wheel[4], wheel[5], wheel[6]
else:
wheel[0], wheel[1], wheel[2], wheel[3], \
wheel[4], wheel[5], wheel[6], wheel[7] = wheel[1], wheel[2], wheel[3], wheel[4], \
wheel[5], wheel[6], wheel[7], wheel[0]
T = int(input())
wheel = [] # 톱니바퀴 정보저장
for _ in range(T):
wheel.append(list(map(int, input())))
N = int(input())
for _ in range(N):
t, dir = map(int, input().split()) # 톱니바퀴 0 ~ T - 1 번까지로 계산
fixed = dont_move() # 움직이지 못하는 톱니바퀴 정보 저장
# fixed에는 [True,False,True]..와 같은 형식으로 저장된다.
# fixed[0] = True -> [0-1번 관계에서는 톱니바퀴가 돌지않음]
# fixed[1] = False -> [1-2번 관계에서는 톱니바퀴가 돌 수 있음]
move(wheel[t - 1], dir) # 우선 입력받은 t-1 번의 톱니바퀴는 무조건 회전
temp_dir = -dir # 방향반대로저장
plus = t - 1 # 입력받은 톱니바퀴의 오른쪽 톱니바퀴들을 확인한다.
while plus <= T - 2: # 톱니바퀴의 관계가 T-2개 까지 있기때문에
if not fixed[plus]: # 만약 해당 톱니바퀴가 돌 수 있다면
move(wheel[plus + 1], temp_dir) # 톱니바퀴를 해당방향으로 돌린다.
else: # 돌 수 없다면
break # 탈출
temp_dir = -temp_dir # 해당방향과 반대로 돈다.
plus += 1 # 톱니바퀴 한개 증가
minus = t - 1 - 1 # 입력받은 톱니바퀴의 왼쪽 톱니바퀴들을 확인한다.
temp_dir = -dir # 방향 반대로 저장
while minus >= 0: # 톱니바퀴의 관계가 0부터 있으므로
if not fixed[minus]: # 만약 해당 톱니바퀴가 돌 수 있다면
move(wheel[minus], temp_dir) # 톱니바퀴를 해당방향으로 돌린다.
else: # 돌 수 없다면
break # 탈출
temp_dir = -temp_dir # 해당방향과 반대로 돈다.
minus -= 1 # 톱니바퀴 한개 증가
count = 0 # S의 개수 세기
for i in wheel: # 톱니바퀴를 돈다.
if i[0] == 1: # 만약 12시방향 톱니바퀴가 S라면
count += 1 # 해당 개수 증가
print(count)
728x90
'코팅테스트 > 백준 문제 모음' 카테고리의 다른 글
SWEA 1861번 파이썬 문제풀이(정사각형 방) (0) | 2022.03.18 |
---|---|
SWEA 1238번 파이썬 문제풀이(Contact) (0) | 2022.03.17 |
백준 1991번 파이썬 문제풀이(트리 순회) (0) | 2022.03.16 |
백준 14499번 파이썬 문제풀이(주사위 굴리기) (0) | 2022.03.15 |
SWEA1767 프로세서 연결하기 - 파이썬문제풀이 (0) | 2022.03.14 |
Comments