프로그래머스/Lv.2
코딩테스트 연습 > 택배상자 - JAVA
아찌방
2024. 1. 21. 01:20
https://school.programmers.co.kr/learn/courses/30/lessons/131704#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이 - 나의 생각
원래 레일에는 1번 택배부터 n번 택배까지 순서대로 올라와 있다.
하지만 목적지에 따라
기사가 원하는 순서대로 바꾸기위해서
보조 컨테이너 벨트를(이하 보조 벨트) 사용할 수 있다.
이 보조 벨트에서 짐을 내리는 순서는
올려놓은 순서의 역순으로만 내릴 수 있다.
즉, 4번을 먼저 싣기위해
1, 2, 3 번을 보조 벨트에 올리면
3, 2, 1 순으로 꺼낼 수 있다.
이건 뭐다?
First In, Last Out => Stack 이다.
그래서 이 위의 설명처럼
order[i] 가 원래 짐과 순서가 다르면
그 순서를 맞추기 위해
원하는 짐의 순서(order[i])까지
스택에 넣어주면 된다.
그 후에
스택의 최상위 값(stack.peek())가 원하는 짐이 맞는지 체크만 해주면 된다.
코드
import java.util.*;
class Solution {
public int solution(int[] order) {
int answer = 0;
int len = order.length;
int box = order[0], num = 0;
Stack<Integer> subRail = new Stack<>();
for(int i = 0; i < len; i++){
box = order[i];
while(num+1 <= box){
subRail.push(num+1);
num++;
}
if(subRail.peek() == box){
subRail.pop();
answer++;
}else break;
}
return answer;
}
}
728x90