[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/131704
[풀이]
메인 컨베이어 벨트는 들어온 순서대로 나가기때문에 Queue를 사용하고, 서브 컨베이어 벨트는 가장 늦게 들어온 택배가 가장 빨리 나가므로 Stack를 사용한다.
택배에 실어야 하는 상자 번호가 현재 상자 번호보다 작다면 서브 컨베이어 벨트에 있다는 의미이므로 서브 컨베이어 벨트의 상자들과 비교한다. 그렇지 않다면 메인 컨베이어 벨트에 있다는 의미이므로 메인 컨베이어 벨트의 상자들과 비교해서상자를 이동시켜준다.
[코드]
import java.util.*;
class Solution {
public int solution(int[] order) {
//영재가 몇 개의 상자를 실을 수 있는지 return
int answer = 0;
int len = order.length;
Queue<Integer> main = new LinkedList<>();
for(int i=1; i<=len; i++){
main.offer(i);
}
Stack<Integer> sub = new Stack<>();
int now = 0;
for(int o:order){
while(true){
if(o < now){
if(sub.peek()==o){
now = sub.pop();
answer++;
break;
}
else{
return answer;
}
}
else if(!main.isEmpty()){
if(main.peek()==o){
now = main.poll();
answer++;
break;
}
else{
sub.push(main.poll());
}
}
}
}
return answer;
}
}
'알고리즘 공부 및 문제 풀이 > 프로그래머스(PRO)' 카테고리의 다른 글
[pro] 프로그래머스 level2 12902 3*n 타일링 (Java) - dp (0) | 2023.03.25 |
---|---|
[pro] 프로그래머스 level1 64061 크레인 인형뽑기 (Java) - 스택 (0) | 2023.03.21 |
[pro] 프로그래머스 level2 131127 할인 행사 (Java) - 시뮬레이션 (0) | 2023.03.06 |
[pro] 프로그래머스 level2 134239 우박수열 정적분 (Java) - 시뮬레이션 (0) | 2023.03.04 |
[pro] 프로그래머스 level2 132265 롤케이크 자르기 (Java) - 시뮬레이션 (0) | 2023.03.03 |