이번 문제는 택배상자 문제이다.
역시나 설명을 잘 읽어야지 해결이 가능하다. 하지만 설명이 또 길다...
우선 벨트에 놓인 상자를 트럭에 실어야 하는데, 순서가 아니라면 잠시 다른 벨트에 보관해야 한다. 하지만 이 보조 벨트는 앞 뒤로 이동만 가능한 입구만 존재하는 벨트이다. 따라서 보조 벨트에 1번, 2번 순서로 상자를 보관 했다면 꺼낼때는 2번, 1번 순서로 꺼내야 한다.
order는 기사님이 알려주신 적재 순서이다.
입출력 예를 살펴보면, 벨트에 1,2,3,4,5 번의 박스가 내려오게 된다.
기사님이 요구한 첫번째 순서는 4 이기 때문에 벨트에는 1,2,3 을 보관하게 되고, 4번은 트럭으로 선적하게 된다.
이제 3번을 트럭에 실어야 하는데, 보조 벨트에 들어가 있다. 다행히 마지막에 벨트에 놓았기 때문에 3번을 빼서 트럭으로 실을 수 있다. 다음은 1번인데, 보조 벨트위에 있고, 1번 상자를 꺼내려면 2번 상자부터 치워야 한다. 하지만 2번 상자를 치울 수 없는 상황이기 때문에 화물 적재가 종료되고, 트럭에는 총 2 상자만 실을 수 있다.
내가 작성한 코드는 deque()를 활용한 코드이다.
시작할때 이미 벨트에 물건을 올려두고 if문을 통해 벨트와 보조벨트 중에 맞는 값을 찾아 트럭에 전달한다, 만약 맞는 값이 없다면 보조 벨트에 벨트의 물건을 저장한다.
그리고 최종적으로 벨트에는 물건이 없고 보조 벨트에서 트럭으로 적재가 불가능하다고 판단되면 break를 통해 빠져나온다. 또한 벨트와 보조벨트에 물건이 없는 경우에도 빠져나온다.
저 종료 조건문이 제일 위에 있는 이유는, index 에러를 막기 위해서다.
예를 들어 입출력 예제 2처럼 [5,4,3,2,1]순서로 트럭에 적재한다고 가정하면
5를 적재하기 전까지 보조벨트에는 [1,2,3,4] 순서로 저장되어 있다. 이제 마지막에 추가한 4부터 다시 트럭에 적재하게 되는데, 최종적으로 트럭에 다 적재한 다음 종료조건문을 만나게 되며, 이때 belt[-1]은 존재하지 않는 index 이기 때문에 에러가 생긴다.
'프로그래머스 퀴즈(Python) > level 2' 카테고리의 다른 글
23.02.13 파이썬 코딩 퀴즈#152 우박수열 정적분 (프로그래머스 스쿨) (0) | 2023.02.13 |
---|---|
23.02.13 파이썬 코딩 퀴즈#151 롤케이크 자르기 (프로그래머스 스쿨) (0) | 2023.02.13 |
23.02.10 파이썬 코딩 퀴즈#149 연속 부분 수열 합의 개수 (프로그래머스 스쿨) (0) | 2023.02.10 |
23.02.10 파이썬 코딩 퀴즈#148 혼자 놀기의 달인 (프로그래머스 스쿨) (0) | 2023.02.10 |
23.02.10 파이썬 코딩 퀴즈#147 할인 행사 (프로그래머스 스쿨) (0) | 2023.02.10 |