티스토리 뷰

728x90

문제

www.acmicpc.net/problem/20055

 

20055번: 컨베이어 벨트 위의 로봇

길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부

www.acmicpc.net

 

풀이

문제 이해를 진짜 이상하게 했다... ㅠ

위의 설명과 같이 컨베이어 벨트는 2N 만큼 회전하지만, 로봇은 N자리에서 out 하기 때문에 N만큼만 회전한다는 사실

그리고 이 원리만 이해한다면 문제에서 나온 그대로 풀면 된다.

 

 

소스코드

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

n, k = map(int, input().split())
belt = deque(list(map(int, input().split())))
robot = deque([0]*n)
res = 0

while 1:
    belt.rotate(1)
    robot.rotate(1)
    robot[-1]=0 #로봇이 내려가는 부분이니 0
    if sum(robot): #로봇이 존재하면
        for i in range(n-2, -1, -1): #로봇 내려가는 부분 인덱스 i-1 이므로 그 전인 i-2부터
            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 #이 부분도 로봇 out -> 0임
    if robot[0] == 0 and belt[0]>=1:
        robot[0] = 1
        belt[0] -= 1
    res += 1
    if belt.count(0) >= k:
        break
                
print(res)
반응형