728x90
반응형
https://www.acmicpc.net/problem/20055
20055번: 컨베이어 벨트 위의 로봇
길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부
www.acmicpc.net
문제 해결
- 문제에서 주어진 패턴을 몇 번 반복하는지 구하는 문제.
- 회전을 하므로 stack이 아닌 que를 이용해야하므로 파이썬에선 deque를 이용한다.
- container 안에 리스트를 만들어 로봇이 있으면 0을 추가적으로 넣어 이동시키는 것을 구현한다.
- index가 n-1일 때 로봇이 있으면 언제든지 빼주도록 한다.(실수로 넘어가면 안된다...)
- pypy3로 통과. 아무래도 pop을 많이 쓰기 때문에 python3에선 빡셀 수도 있다 생각했다.
CODE
from collections import deque
def simulate():
global container
# 벨트 회전
container.appendleft(container[-1])
container.pop()
# 로봇 이동
while len(container[n-1])>1:
container[n-1].pop()
for i in range(n-2,-1,-1):
if len(container[i])>=2 and len(container[i+1])==1 and container[i+1][0] >=1:
container[i+1].append(container[i].pop())
container[i+1][0] -= 1
while len(container[n-1])>1:
container[n-1].pop()
if container[0][0] >0:
container[0].append(0)
container[0][0] -= 1
if __name__=='__main__':
n, k = map(int, input().split())
A = list(map(int,input().split()))
container = deque([[]for _ in range(2*n)])
for i in range(2*n):
container[i].append(A[i])
t = 1
while True:
simulate()
cnt = 0
for i in range(2*n):
if container[i][0] ==0:
cnt += 1
if cnt>=k:break
else:t+=1
print(t)
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 9328 열쇠 (0) | 2023.06.22 |
---|---|
[python] 백준 1208 부분수열의 합 (0) | 2023.06.22 |
[python] 백준 11758 CCW (0) | 2023.06.14 |
[python] 백준 17822 원판 돌리기 (0) | 2023.06.07 |
[python] 백준 17140 이차원 배열과 연산 (0) | 2023.06.03 |
댓글