알고리즘/BOJ
[백준] 20055_컨베이어 벨트 위의 로봇 (Python)
엉아_
2022. 2. 28. 15:58
728x90
📕 문제
https://www.acmicpc.net/problem/20055
20055번: 컨베이어 벨트 위의 로봇
길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부
www.acmicpc.net
💡 풀이법
: 문제를 이해하지 못해 한참을 해맸다..;;
이해하는데 시간이 더 걸린 문제ㅋㅋㅋㅋ
1. 컨베이어 벨트를 길이가 2N인 deque로 만들어주고, 칸마다 박스가 있는지 없는지를 체크하는 boxes 리스트도 deque로 만들어 준다. 이때, 박스는 컨베이어 벨트의 위에만 있을거기 때문에 아래칸은 무시하고 길이가 N인 리스트를 만들었다.
2. 이제 문제에 나온 순서대로 먼저 벨트와 박스를 한칸 땡긴다.
그 다음, 내릴 위치에 있는 박스는 내린다.
3. 그 다음 박스를 앞으로 이동시키는데 앞의 칸이 비었고 벨트의 내구성이 남아있을 때만 앞으로 이동시킨다.
그 다음, 내릴 위치에 있는 박스는 내린다.
4. 올릴 위치에 박스가 없고 칸의 내구성이 남아있다면 박스를 올린다.
5. 벨트의 내구성이 0이 된 칸이 K 이상이면 break를 하고 그렇지 않으면 계속 위의 순서를 반복한다.
from collections import deque
import sys
N, K = map(int, sys.stdin.readline().split())
belt = deque(list(map(int, sys.stdin.readline().split())))
n = 1
boxs = deque([0 for _ in range(N)])
while True:
# 2.
belt.appendleft(belt.pop())
boxs.pop()
boxs.appendleft(0)
boxs[-1] = 0
# 3.
for i in range(N-2, -1, -1):
if boxs[i] and not boxs[i+1] and belt[i+1]:
boxs[i+1] = 1
belt[i+1] -= 1
boxs[i] = 0
boxs[-1] = 0
# 4.
if belt[0] and not boxs[0]:
boxs[0] = 1
belt[0] -= 1
# 5.
if belt.count(0) >= K :
break
n += 1