[백준] 20055 - 컨베이어 벨트 위에 로봇 / Python / 골드 5

KimYoungWoong·2022년 8월 14일
0

BOJ

목록 보기
9/31
post-thumbnail

🚩문제 주소


📄풀이


회전은 deque의 rotate 함수를 활용해 구현합니다.
로봇은 내리는 위치에서 없어지기 때문에 길이는 컨베이어 벨트의 반으로 정해줍니다.
과정 구현은 문제 설명대로 구현하면 되는데,

  • 1단계: 벨트와 로봇을 회전해준 후, 내리는 위치의 로봇을 0으로 바꿔줍니다.
  • 2단계: 로봇이 존재할 때, 로봇 배열 끝-1 에서부터 로봇이 있고 다음 자리에 로봇이 없고 벨트의 내구도가 1 이상이면, 현재 자리의 로봇을 0으로 바꾸고 로봇을 옮기고 벨트의 내구도를 1 감소시킵니다. 그 후 내리는 위치의 로봇을 내려줍니다.
  • 3단계: 로봇의 올리는 위치에 로봇이 없고, 벨트의 내구도가 0이 아니라면 로봇을 올리고 내구도를 감소시킵니다.
  • 4단계: 벨트의 내구도가 0인게 k 이상이면 종료시킵니다. 아니라면 정답을 1 증가시킵니다.


👨‍💻코드


from collections import deque
n,k = map(int, input().split())
belt = deque(list(map(int, input().split())))
robot = deque([0]*(len(belt)//2))
answer = 1

while True:
  # 1단계
  belt.rotate(1)
  robot.rotate(1)
  robot[-1] = 0

  # 2단계
  if sum(robot):
    for i in range(-2, -n-1, -1):
      if robot[i] == 1 and robot[i+1] == 0 and belt[i+1-n] >= 1:
        robot[i] = 0
        robot[i+1] = 1
        belt[i+1-n] -= 1
    robot[-1] = 0

  # 3단계
  if robot[0] == 0 and belt[0] != 0:
    robot[0] = 1
    belt[0] -= 1

  # 4단계
  if belt.count(0) >= k:
    break
  answer+=1

print(answer)

profile
블로그 이전했습니다!! https://highero.tistory.com

0개의 댓글