Notice
Recent Posts
Recent Comments
관리 메뉴

즐겁게, 코드

BOJ 20055번 - 컨베이어 벨트 위의 로봇 본문

💯 알고리즘/백준 온라인 저지

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

Chamming2 2021. 4. 17. 20:29

[백준 온라인 저지 링크]

 

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

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

www.acmicpc.net

애매한 점을 하나 정리해드리면, N번째 지점은 밟자마자(발판이 움직이든 로봇이 움직이든) 내려간다고 생각하시면 됩니다.

또, 로봇이 전진하기 위해 현재 칸에 로봇이 있어야 하고 다음 칸에는 로봇이 있어서는 안되는 걸 잊으면 안됩니다!

(이걸 처리하지 않으면 세 번째, 네 번째 케이스에서 걸립니다 ㅠㅠㅠ)

if belt[N - i] > 0 and robot[N - i - 1] == True and robot[N - i] == False:

[정답 코드 - Python]

from collections import deque

N, K = map(int, input().split())
belt = deque(map(int, input().split()))
robot = deque([False] * (2 * N))


def run():
    step = 0
    while 1:
        step += 1
        # 벨트 한칸 이동
        belt.appendleft(belt.pop())
        robot.appendleft(robot.pop())

        if robot[N - 1] == True:
            robot[N - 1] = False

        # 로봇 한칸 이동
        for i in range(1, N):
            if belt[N - i] > 0 and robot[N - i -
                                         1] == True and robot[N - i] == False:
                robot[N - i] = robot[N - i - 1]
                robot[N - i - 1] = False
                belt[N - i] -= 1

            if robot[N - 1] == True:
                robot[N - 1] = False

        # 로봇 올리고
        if robot[0] == False and belt[0] > 0:
            robot[0] = True
            belt[0] -= 1

        if belt.count(0) >= K:
            return step


print(run())

뭔가 딱 봤을때 "이거 내가 풀 수 있을거 같은데?" 로 시작했다가 생각보다 시간을 많이 잡아먹은 문제였습니다.

그래도 체감상 동난이도의 DP 문제들보다는 시뮬레이션 쪽이 쉬운 것 같네요!

반응형

'💯 알고리즘 > 백준 온라인 저지' 카테고리의 다른 글

BOJ 1051번 - 숫자 정사각형  (0) 2021.04.24
BOJ 1895번 - 필터  (0) 2021.04.24
BOJ 7576번 - 토마토  (1) 2021.04.14
BOJ 1935번 - 후위 표기식 2  (0) 2021.04.14
BOJ 2468번 - 안전 영역  (0) 2021.04.12
Comments
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆