프로그래머스|택배상자

README·2023년 1월 13일
0

파이썬 PS풀이

목록 보기
110/136

문제 설명

배열을 하나 입력받고 이때 배열 값의 크기는 꺼낼 수 있는 순서를 의미합니다. 배열의 인덱스 번호대로 정렬을 하려고 할 때 만약 현재 필요한 순서의 값을 꺼낼 수 없으면 현재 값을 꺼내서 다른 스택에 저장해놓을 수 있고 만약 어떤 방식으로도 현재 필요한 순서의 값을 꺼낼 수 없으면 그 상태에서 프로그램을 종료합니다. 이때 순서에 맞게 꺼낼 수 있는 값의 개수를 구하는 문제입니다.

작동 순서

  1. 배열을 입력받고 배열의 인덱스 번호를 원소로 추가한뒤 배열 값을 기준으로 배열을 정렬합니다. 이 과정을 통해서 배열을 꺼낼 수 있는 순서대로 정렬합니다.
  2. 만약 현재 배열이 꺼낼 수 있는 순서이면 꺼내고 그렇지 않으면 스택에 삽입합니다.
  3. 현재 배열을 꺼내고 스택의 가장 위에 있는 원소가 현재 꺼낼 수 있는 순서이면 꺼냅니다.
  4. 남은 배열의 맨 앞자리와 스택의 가장 윗자리가 모두 꺼낼 수 없는 순서이면 프로그램을 종료합니다.

소스 코드

from collections import deque
def solution(order):
    answer = 1
    arr=[[i+1, order[i]] for i in range(len(order))]
    arr.sort(key = lambda x:x[1])
    stack=deque()

    for i in range(len(order)):
        if arr[i][0]==answer:
            answer+=1
            while stack:
                if stack[-1][0]==answer:
                    stack.pop()
                    answer+=1
                else:
                    break
        else:
            stack.append(arr[i])
    return answer-1

p.s. 문제를 푸는것보다 문제를 해석하고 설명하는게 더 어렵네요... 문제 지문이 무슨 수능 비문학 같은 느낌입니다...
p.s.2. 문제 설명이 뭔가 엉망진창인것 같은데 나중에 보고 수정할 수 있으면 다시 수정해야겠네요...

profile
INTP 개발자 지망생

0개의 댓글