[백준]14891번 톱니바퀴(python 파이썬)
by 코딩무비반응형
https://www.acmicpc.net/problem/14891
생각해보아야 할 것
1. 회전은 어떻게 구현하는가?
시계방향으로
회전 했을 때
회전 했을 때
- 맨 뒤 빼고 맨 앞에 붙이기
wheels[number].appendleft(wheels[number].pop())
반시계방향으로
회전 했을 때
회전 했을 때
- 맨 앞 빼고 맨 뒤에 붙이기
wheels[number].append(wheels[number].popleft())
2. 해당 톱니바퀴는 회전해야 하는가?
K번 톱니바퀴를 돌렸을 때
- K-1번 톱니바퀴부터 0번 톱니바퀴까지 오른쪽 톱니바퀴와 다른 극인지 확인
for i in range(w-1,-1,-1):
if wheels[i][2] != wheels[i+1][-2]:
is_rotate[i] =True
else:
break
- K+1번 톱니바퀴부터 4번 톱니바퀴까지 왼쪽 톱니바퀴와 다른 극인지 확인
for i in range(w+1,4):
if wheels[i][-2] != wheels[i-1][2]:
is_rotate[i] = True
else:
break
3. 해당 톱니바퀴는 어떻게 회전해야 하는가?
K번 톱니바퀴를 돌렸을 때
- i번 톱니바퀴와 K번 톱니바퀴가 2의 배수만큼 차이나면 같은 방향
if is_rotate[i] and (w-i)%2 == 0:
rotate(i,d)
- i번 톱니바퀴와 K번 톱니바퀴가 2의 배수만큼 차이나지 않으면 다른 방향
elif is_rotate[i] and (w-i)%2 == 1:
rotate(i,not d)
전체 코드
"""
https://www.acmicpc.net/problem/14891
시계방향이면 -> 맨뒤 떼고 맨 앞에 붙이기 pop(),appendleft()
반시계방향이면 -> 맨 앞 떼고 맨 뒤에 붙이기 popleft(), append()
"""
def rotate(number,direct):
if direct:
wheels[number].appendleft(wheels[number].pop())
else:
wheels[number].append(wheels[number].popleft())
def check(w,d):
is_rotate = [False for _ in range(4)]
is_rotate[w] = True
for i in range(w-1,-1,-1):
if wheels[i][2] != wheels[i+1][-2]:
is_rotate[i] =True
else:
break
for i in range(w+1,4):
if wheels[i][-2] != wheels[i-1][2]:
is_rotate[i] = True
else:
break
for i in range(4):
if is_rotate[i] and (w-i)%2 == 0:
rotate(i,d)
elif is_rotate[i] and (w-i)%2 == 1:
rotate(i,not d)
from collections import deque
wheels = []
for _ in range(4):
wheel = deque(list(input()))
wheels.append(wheel)
K = int(input())
for _ in range(K):
a,b = map(int,input().split()) # 휠, 방향
if b == 1:
is_right = True
else:
is_right = False
check(a-1,is_right)
result = 0
for i in range(4):
result+= int(wheels[i][0])*(2**i)
print(result)
반응형
'문제풀이(ps)' 카테고리의 다른 글
[프로그래머스] 가장 먼 노드(python 파이썬) (8) | 2022.04.21 |
---|---|
[백준]16236번 아기 상어(python 파이썬) (4) | 2022.04.18 |
[백준] 11559번 Puyo Puyo(python 파이썬) (2) | 2022.04.14 |
[백준] 1525번 퍼즐 (python 파이썬) (3) | 2022.04.03 |
[백준]1939번 : 중량제한 (4) | 2022.03.19 |
블로그의 정보
코딩무비
코딩무비