09009

[프로그래머스 lv2] 택배 상자 본문

Algorithm
[프로그래머스 lv2] 택배 상자
09009

문제 보기

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

 

프로그래머스

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

programmers.co.kr

 

문제 해결

문제가 너무 길어서 풀기부터 곤란했다. 심지어 문제 설명도 제대로 이해하지도 못했다. 

from collections import deque
import heapq as hq
def solution(order):
    answer = 0
    first_belt = []
    second_belt = [] 
    original_order = [i for i in range(1, len(order)+1)]
    
    for i in range(len(order)):
        # order 순서와 원래 순서가 맞지 않을 경우 보조 벨트에 넣는다
        if order[i] != original_order[i]:
            second_belt.append(order[i])
        else:
            first_belt.append(order[i])
 
    second_belt.sort(reverse=True)
    first_belt.sort()
    
    second_belt = deque(second_belt)
    first_belt = deque(first_belt)
    
    for i in range(len(order)):
        if order[i] == second_belt[0]:
            second_belt.popleft()
            answer += 1
        elif order[i] == first_belt[0]:
            first_belt.popleft()
            answer += 1
        else:
            break
            
        
    return answer

테스트 케이스는 맞았으나 완전히 틀림..

근데 다른 사람 풀이를 보면 너무 간단하게 답이 나와서 허무했다.

 

 

소스 코드

- 다른 사람 풀이

 index 순서대로 컨테이너에 상자를 싣고 order에 있는 처음 원소와 같으면 1 증가시키고 컨테이너에 박스를 빼준다.

 

def solution(order):
    container = []
    i = 1
    cnt = 0 
    while i != len(order)+1:
        container.append(i)
        while container and container[-1] == order[cnt]:
            cnt += 1
            container.pop()
            
        i += 1
    return cnt