문제:

풀이방법:

처음에 문제를 이해하는 것이 가장 어려웠던 것 같다. 다음과 같은 흐름으로 문제를 이해하면 도움이 될 것 같다.

 

  • 택배 상자는 무조건 [1,2,3,4, ... ] 와 같은 순서로 주어진다.
    • 택배 기사님의 순서와는 무관하다.
  • 문제의 설명을 보면 Stack을 사용해야 한다. 이 때, 컨테이너 벨트(main), 보조 컨테이너 벨트(sub) 모두 stack으로 이루어진 배열이다.
    • 단, 컨테이너 벨트에는 [1,2,3,4, ...]가 이미 적재되어 있다.
  • main에서 sub로 이동하는 것은 가능하지만, sub에서 main으로 이동하는 것은 불가능하다.

결국 2개의 stack 배열을 사용해서 택배 기사님의 순서를 맞추는 문제라고 생각하면 된다.

 

 main에서 sub로만 이동하는 것이 가능하기 때문에 main 혹은 sub의 out 상자가 첫 택배 기사님의 순서에 맞게 세팅을 해둔다. 택배 기사님이 원하는 택배 상자를 적재 하고 main이나 sub에 또 원하는 상자가 있다면 연속해서 적재하며 만약 그렇지 않다면 main에서 sub로 이동시키며 조건을 만족하는지 계속해서 확인한다.

 이 과정을 main의 모든 택배 상자가 비었으며, 더 이상 적재하지 못할 때까지 반복한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
def solution(order):
    main = list(range(len(order), 0-1))
    sub = []
    answer = []
    while True:
        if main[-1]==order[0]:
            break
        elif len(sub) and sub[-1]==order[0]:
            break
        sub.append(main.pop())
        
    idx = 0
    while True:
        if len(main) and (main[-1== order[idx]):
            answer.append(main.pop())
            idx += 1
        elif len(sub) and (sub[-1== order[idx]):
            answer.append(sub.pop())
            idx += 1
        else:
            if len(main):
                sub.append(main.pop())
            else:
                break
    return len(answer)
cs

문제링크:

https://school.programmers.co.kr/learn/courses/30/lessons/131704

'Algorithm > Python' 카테고리의 다른 글

[BOJ] 1343. 폴리오미노  (0) 2023.07.07
[BOJ] 18405. 경쟁적 전염  (0) 2023.07.06
[1138] 한 줄로 서기  (0) 2023.07.04
[2477] 참외밭  (0) 2023.07.03
[BOJ]14620. 꽃길  (1) 2022.08.18

+ Recent posts