상세 컨텐츠

본문 제목

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

Algorithm

by 쑤야. 2024. 1. 16. 13:55

본문

https://school.programmers.co.kr/learn/courses/30/lessons/131704?language=swift

 

프로그래머스

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

programmers.co.kr

 

접근


  • 택배 기사님이 알려준 순서에 맞게 컨테이너 벨트에서 택배 상자를 실어야 한다 → 투 포인터
  • 보조 컨테이너 벨드는 맨 앞의 상자부터 꺼낼 수 있다 → 스택

 

로직


  • order 배열의 인덱스를 가리키는 p를 초기화한다.
  • 택배 상자 넘버의 최댓값(n)을 구한 후, 1번부터 n번 까지 반복문을 수행한다.
  • 컨테이너 벨트와 서브 컨테이너의 로직을 하나로 통일하기 위해 서브 컨테이너 안에 현재 상자를 넣는다.
  • 중첩 반복문을 통해 서브 컨테이너의 마지막 택배 상자가 차례가 된 택배 상자일 경우, answer 값과 컨테이너 포인터를 1씩 증가시키고, container에서 상자를 하나 제거한다. 

 

코드


1. Swift 풀이


import Foundation

func solution(_ order:[Int]) -> Int {
    
    let n = order.max()!
    
    var p = 0
    var container = [Int]()
    var answer = 0 
    
    for i in 1...n {
        
        container.append(i)
        
        while p < order.count && container.last == order[p] {
            answer += 1
            container.removeLast()
            p += 1
        }
    }
    
    return answer
}

 

2. Python 풀이


def solution(order):
    
    n = max(order)
    p = 0
    container = []
    answer = 0

    for i in range(1,n+1):
        
        container.append(i)
        
        while p < len(order) and len(container) > 0 and order[p] == container[-1]:
            answer += 1
            p += 1
            container.pop()
    
    return answer

관련글 더보기