본문 바로가기
ALGORITHM/BAEKJOON

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

by 안녕나는현서 2022. 2. 27.
728x90

📌 문제

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

 

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

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

www.acmicpc.net

 

📌 문제 접근 방법

  1. 문제에서 제시한 방법대로 구현을 하는 거라 어렵진 않았는데, 문제가 헷갈리게 써있었다..😥
    우선 컨베이어 벨트 위에 맨 처음에는 로봇이 하나도 올려져있지 않은 상태이고,
    1에서 4까지 모두 수행한 사이클이 1단계임을 숙지하고 구현해보자!
  2. 테스트 케이스 3번과 4번에서 자꾸 틀렸었는데, 질문 게시판을 보니 '가장 먼저 벨트에 올라간 로봇부터' 라는 조건을 확인하라고 했다.
    나의 경우엔 해당 조건을 잘 지키고 있었기 때문에 다른 문제를 찾아내야했다.
  3. 결국 문제는 2가지였다.
    1) 2번의 과정에서 else문을 안써서 이동하지 못한 로봇을 temp에서 누락시켰던 것
    2) 2번의 과정에서 로봇이 움직일 수 있는지 판단을 할 때, not in robots이라고 써서 판단했었는데 이렇게 하면 로봇이 움직인 위치가 반영되지 않아서 움직일 수 있는 로봇도 못 움직이게 되었다. not in temp로 수정해주니 통과할 수 있었다.

 

📌 코드

# 백준 20055 컨베이어 벨트 위의 로봇
from collections import deque

N, K = map(int, input().split())
powers = deque(map(int, input().split()))
robots = []
answer = 0

while powers.count(0) < K:
    answer += 1

    # 1
    powers.appendleft(powers.pop())

    temp = []
    for robot in robots:
        if robot != N - 2:
            temp.append(robot + 1)
    robots = temp
    
    
    # 2
    temp = []
    for robot in robots:
        if robot+1 not in temp and powers[robot+1] > 0:
            powers[robot+1] -= 1

            if robot != N - 2:
                temp.append(robot + 1)
        else:
            temp.append(robot)
    robots = temp
    
    # 3
    if powers[0] > 0:
        powers[0] -= 1
        robots.append(0)

print(answer)
728x90

댓글