새소식

Problem solving/문제 풀이 - 2023.04.05

[Python] 프로그래머스 택배상자 풀이

  • -

문제 확인

 

프로그래머스

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

programmers.co.kr

 

나의 풀이

  • 기존 컨베이어 벨트와 보조 컨베이어 벨트를 각각 QueueStack으로 만든 뒤, 주어진 조건에 만족하도록 구현했다.
# 1 ~ n 까지의 택배를 재 배열
# 기존 컨베이어 : queue -> 작은 수부터 빼낼 수 있음
# 보조 컨베이어 : Stack -> 큰 수부터 빼낼 수 있음
# 몇 개의 상자를 실을 수 있는지
# order의 상자가 나올 때 까지 pop

from collections import deque

def solution(order):
    order = deque(order)
    # 메인 컨베이어 작업 목록
    main_line = deque(range(order[0] ,len(order) + 1))
    # 서브 컨베이어 작업 목록
    sub_line = list(range(1, order[0]))
    # 개수 확인
    cnt = 0
    # 꺼낼 main이 있는지 확인
    flag = True
    while flag and order:
        order_now = order.popleft()
        while True:
            # 메인에 있는 경우
            if main_line and main_line[0] == order_now:
                main_line.popleft()
                cnt += 1
                break
            # 서브에 있는 경우
            if sub_line and sub_line[-1] == order_now:
                sub_line.pop()
                cnt += 1
                break
            # 둘 다에 없는 경우
            if not main_line:
                flag = False
                break
            else:
                sub_line.append(main_line.popleft())
    return cnt

 

다른 사람의 풀이

  • 보조 컨베이어 벨트 Stack에 제품을 옮기고, 제거할 성분이 생기면 while 반복문을 통해서 제거했다.
  • Queue, Stack 문제가 보통 이렇게 접근하는 경우가 많으니, 담부턴 요런 방식으로 풀어보자! 
def solution(order):
    assist = []
    i = 1
    cnt = 0 
    while i != len(order)+1:
        assist.append(i)
        while assist and assist[-1] == order[cnt]:
            cnt += 1
            assist.pop()
            
        i += 1
    return cnt
 

[프로그래머스] 택배상자, python

https://school.programmers.co.kr/learn/courses/30/lessons/131704 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞

americanoisice.tistory.com

 

Contents

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

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