본문 바로가기

카테고리 없음

파이썬) 컨베이어 벨트 위의 로봇 - BOJ

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

 

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

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

www.acmicpc.net

 

from collections import deque

n, k = map(int, input().split())

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


step = 0

while 1:
    belt.rotate(1)
    robot.rotate(1)
    # 회전
    robot[-1] = 0
    # 로봇 아웃

    if sum(robot):
        # 로봇이 있으면
        for i in range(n-2, -1, -1):
            # -1번째는 무조건 아웃했으니까 -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
    if robot[0] == 0 and belt[0] >= 1:
        # 로봇 올리기
        robot[0] = 1
        belt[0] -= 1
    step += 1

    if belt.count(0) >= k:
        break

print(step)

좀 어지러운 문제였다.

deque 모듈에 rotate라는 기능이 있는지 몰라서 벨트를 Top,bottom이라는 배열 두개로 나누어 진행했는데 관리해야 할 배열이 로봇 배열까지 총 3개가 되니 너무 어지러웠다...

 

다른 사람의 코드가 더 깔끔해보이긴하다.