소스 코드

# n 컨베이어 벨트 길이, k 탈출조건
n,k = map(int,input().split())

# 컨베이어 벨트 내구도
belt = list(map(int,input().split()))

# 로봇의 위치
robot_idx = [0]*n

# 출력 단계
res = 1

# k와 비교하기 위한 값
cnt = 0

while True:

    # 벨트 이동
    belt.insert(0,belt.pop(-1))

    # 컨베이어 벨트의 회전에 따라 로봇의 위치도 조정
    # 마지막 위치는 바닥으로
    # 마지막 위치에 도달한 로봇은 바닥으로 뛰어 내림
    robot_idx.insert(0,0)
    robot_idx.pop(-1)
    robot_idx[-1] = 0

    for q in range(2,n+1):

        # 로봇이 올라가있고
        if robot_idx[-q] != 0:

            # 이동할 위치가 비어있고
            # 이동할 위치의 내구도가 1 이상인 경우
            # 이동하고, 내구도 감소
            if robot_idx[1-q] == 0 and belt[n+1-q] > 0:
                robot_idx[1 - q] = 1
                robot_idx[-q] = 0
                belt[n + 1 - q] -= 1

                # 내구도가 0이면 cnt + 1 해주기
                if belt[n + 1 - q] == 0:
                    cnt += 1

    # 탈출조건
    if cnt >= k:
        break

    # index 0 의 자리가 비어있고, 내구도가 1 이상이면
    if robot_idx[0] == 0 and belt[0] > 0:
        robot_idx[0] = 1
        belt[0] -= 1

        if belt[0] == 0:
            cnt += 1

    # 탈축조건
    if cnt == k:
        break

    # 다 돌면 현재 단계 + 1
    res += 1

print(res)

 


해결 방법

1. 조건을 정확이 이해하고 순서대로 작성하면 됨

 

ex) 로봇 = 1, 빈 자리 = 0이라고 할 때,

 

현재 컨베이어 벨트 위의 상태 0 1 1

 

1) 컨베이어 벨트 회전 > 컨베이어 벨트 위의 상태 0 0 1

 

2) 로봇 이동 > 내려가는 위치에 있는 로봇은 내려감 > 0 0 0

 

3) [0] 위치에 로봇 추가 > 1 0 0

 

4) 반복

 

이런 순서로 진행 됨, 예시의 2)을 이해하는게 쉽지 않았음...(개인적인 의견일뿐임)


느낀 점

문제 이해의 난이도 >>> 코드 작성

 

문장 이해력을 높여야 함... ㅠㅠㅠ

 

ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.

 

오류적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.

 

혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.