여니의 취준 준비/코딩테스트 (Python)

[Python] n20055번 | 컨베이어 벨트 위의 로봇

여니's 2021. 4. 22. 17:09

컨베이어 벨트 길이 : N

컨베이어 벨트 위아래 총 길이 : 2N

벨트 간격 : 1

벨트 칸 수 : 2N개

 

반드시 로봇은 올라가는 위치(1)에서만 올라가고, 내려가는 위치(N)에서만 내려갈 수 있다.

내려가는 위치에 있는 로봇의 경우 반드시 땅으로 내려가야 한다.

칸에 올라가거나 이동하면, 그 칸의 내구도는 즉시 1만큼 감소한다.

내구도가 0인 칸에는 로봇 올라갈 수 없다.

 

> 이 글의 목적 : 컨베이어 벨트를 이용해 로봇들을 건너편으로 옮기려고 한다.

* 과정 *

1. 벨트가 한 칸 회전한다.

2. 가장 먼저 벨트가 올라간 로봇부터 회전하는 방향으로 이동이 가능하면, 이동한다.

이동할 수 없다면 가만히 있는다.

(이동하려면 이동하려는 칸에 로봇이 없어야 하며, 그 칸의 내구도가 1이상 남아있어야 한다)

3. 올라가는 위치에 로봇이 없다면 로봇을 하나 올리기

4. 내구도가 0인 칸의 개수가 K개 이상이라면 과정 종료, 그렇지 않다면 1번으로 들어간다.

 

> 종료시, 몇 번째 단계가 진행중이었는지 구해본다.

출처 https://www.acmicpc.net/problem/20055

N : 컨베이어 벨트 길이 (한 면), K : 내구도가 0인 칸의 개수, Ai : i번 칸의 내구도