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

4past12·2023년 7월 9일
0
post-thumbnail

링크텍스트

이 문제는 삼성 기출이라는데, 문제를 이해하기가 매우 까다로웠다.. 끅

import sys
from collections import deque
n, k = map(int, sys.stdin.readline().split())
belt = deque(list(map(int, sys.stdin.readline().split()))) # A 각 자리의 내구도
robot = deque([0]*n) # 로봇의 위치
ans = 0

while True:
    # 1 _ 한칸씩 오른쪽으로 회전
    belt.rotate(1)
    robot.rotate(1)
    robot[-1] = 0 # 로봇 내려가는 지점에서는 항상 0
    # 2 _ 로봇이 존재하면, 로봇 자체 이동
    if sum(robot):
        for i in range(n-2,-1,-1):
            if robot[i] == 1 and robot[i+1] == 0 and belt[i+1] >= 1:
                robot[i+1] = 1
                robot[i] = 0
                belt[i+1] -= 1
        robot[-1] = 0
    # 3 _ 올리는 위치 내구도 0이 아니면 로봇 올림.
    if robot[0] == 0 and belt[0] >= 1:
        robot[0] = 1
        belt[0] -= 1
    ans += 1
    # 4 _ 내구도 0인 칸 k개 이상인지 확인
    if belt.count(0) >= k:
        break
print(ans)

중간에 for i in range(n-2,-1,-1) 으로 돌리는데,
다음 칸 (i+1)칸에 대한 영향을 받게 하지 않게 하기 위해 역순으로 탐색한다는 것이 주목할 만 하다.

profile
직무전환 무새. 딴생각 오지게 함. 근데 1년차 직장인ㅋ.

0개의 댓글