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

ewillwin·2023년 7월 14일
0

Problem Solving (BOJ)

목록 보기
121/230

풀이 시간

  • 41m
  • 코테 준비를 하다보면서 느끼는 게, 문제의 표현이 조금 명확하지 않은 경우도 있다는 점이다. 최대한 꼼꼼히 읽어보고 센스있게 해석하는 자세가 필요할듯.

구현 방법

  • 문제에서 시키는 대로 구현하면 되는 문제이다
  • 나는 그냥 내구도와 로봇이 있고 없고를 2차원 리스트를 이용하여 저장해주었다
    -> deque([[1, 1], [2, 1], [3, 0], [4, 0], [5, 0], [6, 0]] 이런 식으로 (deque는 rotate 내장 함수가 있어서 회전 시킬 때 편하다)
  • +) 1번, 2번 끝나고 내리는 위치에 로봇이 있다면 바로 내려줘야함

코드

import sys
from collections import deque


N, K = map(int, sys.stdin.readline()[:-1].split())
tmp = list(map(int, sys.stdin.readline()[:-1].split()))
A = deque([])
for n in range(2*N):
    A.append([tmp[n], 0])

cnt = 0
while True:
    cnt += 1

    #1번
    A.rotate(1)
    if A[N-1][1] == 1:
        A[N-1][1] = 0

    #2번
    for i in range(N-2, -1, -1):
        if A[i][1] == 1:
            if A[i+1][0] >= 1 and A[i+1][1] == 0:
                A[i][1] = 0
                A[i+1][1] = 1
                A[i+1][0] -= 1
    if A[N-1][1] == 1:
        A[N-1][1] = 0

    #3번
    if A[0][0] != 0:
        A[0][1] = 1
        A[0][0] -= 1

    #4번
    zero = 0
    for i in range(2*N):
        if A[i][0] == 0:
            zero += 1
    if zero >= K:
        break

print(cnt)

결과

profile
Software Engineer @ LG Electronics

0개의 댓글