from collections import deque
def solution(order):
answer = 0 ; ans = []
ls = [i+1 for i in range(len(order))]
subcontainer = deque() ; container = deque(ls)
for i in range(len(order)):
if order[i] in subcontainer and order[i]==subcontainer[0]:
answer += 1
ans.append(subcontainer.popleft())
elif order[i] in subcontainer and order[i]!=subcontainer[0]:
break
else:
while True:
k = container.popleft()
if order[i] == k:
answer += 1
ans.append(k)
break
else:
subcontainer.appendleft(k)
return answer
풀이
소신 발언 후 시작
진짜 문제에서 뭔소리를 하는건지 이해를 못해서 오래 걸렸다. order 내에 있는걸 1,2,3,4,5로 정렬해야 하는데 몇개나 가능한지를 구하라는 걸로 처음에 이해해서 테스트 케이스를 다 틀려서 절망 후 질문 게시판에서 문제를 이해했다.
1,2,3,4,5로 주어져 있는 상품? 제품들을 order 순서로 택배 트럭에 넣어야 하는데, sub container를 하나 주고 (sub container는 반드시 후입선출이다) order 순서로 몇개나 넣을 수 있냐는 거였다.
예시로, order = [4, 3, 1, 2, 5], result = 2라면 처음에 만들어지는 상품 리스트는 [1,2,3,4,5]일 것이다. 첫번째로 택배 트럭에 넣어야하는 상품은 4이므로, sub container에 1,2,3을 넣는데 후입선출로 입력하니 [3,2,1]이 될 것이다. 그럼 상품 리스트는 [4,5]가 되고 4를 트럭에 넣을 수 있다.
두번째로는 3을 넣어야한다. 이건 sub container 맨 앞에 있으니 바로 넣을 수 있다. 그럼 상품 리스트는 현재 [5]가 될 것이고, sub container는 [2,1]이 된다.
세번째는 1을 넣어야한다. 1은 sub container에 있는데 맨 앞에 있는 상품이 2이기 때문에 1은 뺄 수 없다. 따라서 여기서 break.
이런 식으로 진행이 되는 문제다.
그래서 난 위에서 설명했던 것과 동일하게 코드를 구현했다. container는 상품 리스트, subcontainer는 서브 컨테이너로 두었다. 굳이 작성할 필요가 없는건 ans 정도? answer += 1을 하기 때문에 ans는 생략해도 될 것 같다.