본문 바로가기
Computer Science/Algorithm

[백준] 20055 - 컨베이어 벨트 위의 로봇(Python)

by 수제햄버거 2020. 10. 22.
728x90
반응형

문제 출처 : www.acmicpc.net/problem/20055

 

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

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

www.acmicpc.net

문제  풀이:

  • 최근 삼성 기출 중 가장 쉬운 난이도라고 생각합니다.
  • 전 상반기에 DS를 써서 오전에 코딩테스트를 봣었는데 그땐 도미노미노 같은 문제가 나와버리는 바람에 조금 당황했었는데 무슨이유인지 하반기는 무척 쉽게 나왔네요 오전이
  • 딱히 함정도 없고 그냥 시키는대로 잘 구현하면 될 것 같습니다.
  • 다만 PyPy3로 제출시엔 정답으로 나오지만 python3로 제출시엔 시간초과로 나옵니다. (이부분은 왜 그런지 조금 더 생각해보아야 할 것 같습니다.)
from collections import deque
import sys

input = sys.stdin.readline
n,k = map(int,input().split())
A = deque(map(int,input().split()))
ans =1

#robot이 들어온 순서대로 현재 자신의 위치를 담고있는다
robot =deque([0]*(n*2))

while(True):
    #1
    A.rotate(1)
    robot.rotate(1)
    robot[n-1]=0 #내려가는 위치에 로봇 삭제

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

    #3
    if(robot[0]==0 and A[0]>0):
        A[0]-=1
        robot[0]=1

    #4
    cnt=0
    for i in range(len(A)):
        if(A[i]==0):
            cnt+=1

    if(cnt>=k):
        print(ans)
        break

    ans+=1
반응형