본문 바로가기
Problem Solving/Implementation

[구현] 백준 20055번: 컨베이어 벨트 위의 로봇 / 실버 1

by ggyongi 2021. 8. 24.
반응형

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

 

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

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

www.acmicpc.net

삼성 기출이라그런지 좀 까다로웠다.

import sys
input = sys.stdin.readline
n, k = map(int, input().split())
nums = list(map(int, input().split()))

up = 0
down = n-1

count = 0
zero = 0
robots = [False for _ in range(2*n)]

while True:
    count += 1
    up -= 1
    down -= 1
    if up < 0:
        up += 2*n
    if down < 0:
        down += 2*n

    if robots[down]:
        robots[down] = False

    if up < down:
        end = up
    else:
        end = up-2*n

    for i in range(down-1, end, -1):
        if robots[i] and not robots[i+1] and nums[i+1] >= 1:
            robots[i] = False
            robots[i+1] = True
            nums[i+1] -= 1

            if nums[i+1] == 0:
                zero += 1

            if (i+1) == down:
                robots[i+1] = False

    if nums[up] != 0:
        robots[up] = True
        nums[up] -= 1
        if nums[up] == 0:
            zero += 1

    if zero >= k:
        break

print(count)
 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글