코딩 테스트/프로그래머스

Lv2. 택배상자

  • -
728x90
반응형

문제 보기 :  택배상자

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


문제

  • 정답률 : 59%


작성 코드

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는 생략해도 될 것 같다. 

320x100
728x90

'코딩 테스트 > 프로그래머스' 카테고리의 다른 글

Lv1. 대충 만든 자판  (0) 2024.09.13
Lv2. 구명보트  (0) 2024.09.11
Lv1. 문자열 나누기  (0) 2024.09.09
Lv2. 주차 요금 계산  (0) 2024.09.09
Lv1. 둘만의 암호  (0) 2024.09.05
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.