보글보글 개발일지
반응형

문제

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

 

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

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

www.acmicpc.net

풀이

코드에 주석으로 다 써놨다..

문제에 약간 논란이 있는 듯 한데, 문제 이해가 관건이다.

파이썬은 위대하다..

rotate랑 count를 처음 써봐서 신세계였던 문제

코드

import sys
from collections import deque

read = sys.stdin.readline
n, k = map(int, input().split())
belt = deque(list(map(int, read().split())))
robot = deque([0] * n)
ans = 0
while (1):
  ans += 1  #단계+1
  belt.rotate(1)  #1단계: 벨트가 한 칸 회전
  robot.rotate(1)  #2단계: 로봇과 함께 한 칸 회전
  robot[-1] = 0  # 내리는 위치에 도달한 경우, 즉시 내림
  for i in range(n - 2, -1, -1):  #맨 뒤에서 두번째, 즉 먼저 올라간 로봇부터 한칸 갈 수 있다면 이동
    if (robot[i] == 1 and belt[i + 1] >= 1 and robot[i + 1] == 0):
      #해당 칸에 로봇이 있고, 이동하려는 칸 내구도 1이상, 로봇 없으면 이동
      robot[i + 1] = 1
      robot[i] = 0
      belt[i + 1] -= 1
  robot[-1] = 0  #로봇이 있으면 0으로 바꿔줌
  if belt[0] >= 1 and robot[0] == 0:  #0번째 벨트에 내구도 있고, 로봇이 없으면
    robot[0] = 1  #로봇 올리고
    belt[i] -= 1 #내구도 1빼기
  if belt.count(0) >= k:
    break
print(ans)
반응형

'알고리즘' 카테고리의 다른 글

[백준/15650][파이썬] N과 M(2)  (0) 2023.04.11
[백준/15649][파이썬] N과 M(1)  (0) 2023.04.10
[백준/7562][Python] 나이트의 이동  (0) 2023.04.07
[백준/1436][Python] 영화감독 숌  (0) 2023.03.29
[백준/1926][Python] 그림  (0) 2023.03.27
profile

보글보글 개발일지

@보글

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!