Algorithm
[프로그래머스] 택배상자
쑤야.
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