[BOJ] 컨베이어 벨트 위의 로봇 - 20055

Kyeongmin·2021년 12월 21일
0

알고리즘

목록 보기
14/24

📃 문제

[BOJ] 컨베이어 벨트 위의 로봇 🔗링크


❓ 문제 접근

  1. 문제는 4가지 동작으로 나뉘고 간단하게 설명하자면,
    ① 벨트, 로봇이 한 칸 회전한다.
    ② 가장 먼저 벨트에 올라간 로봇부터 앞으로 이동이 가능하면 한 칸 이동한다.
        (로봇이 없는지, 내구도가 남아있는지 확인)
    ③ 올리는 위치에 칸의 내구도가 남아 있다면 로봇을 올린다.
    ④ 내구도가 0인 칸의 개수가 K개 이상이면 종료한다.

🧠 풀이

import sys
from collections import deque
input = sys.stdin.readline

N, K = map(int, input().split())
conveyor = deque(list(map(int, input().split())))
boxRobot = deque([0]*N)
count = 0

while(True):
    count += 1

    ## Step 1 : Move Conveyor
    conveyor.rotate(1)
    boxRobot.rotate(1)
    boxRobot[-1] = 0

    ## Step 2 : Move Robots
    if sum(boxRobot):
        for idx in range(N-2, -1, -1):
            if(boxRobot[idx] and boxRobot[idx+1] == 0 and conveyor[idx+1]):
                boxRobot[idx] = 0
                boxRobot[idx+1] = 1
                conveyor[idx+1] -= 1
    boxRobot[-1] = 0

    ## Step 3 : Put Robot on the first
    if(conveyor[0]):
        boxRobot[0] = 1
        conveyor[0] -= 1
        
    ## Step 4 : Counting Durability
    if(conveyor.count(0) >= K):
        break

print(count)
profile
개발자가 되고 싶은 공장장이🛠

0개의 댓글