알고리즘 풀이 및 리뷰/프로그래머스
[240418] 알고리즘 리부트 51일차 - 프로그래머스 택배상자 자바
앙갱
2024. 4. 18. 23:20
반응형
지문에서 보조 컨테이너 벨트는 스택으로 구현해야 함을 파악할 수 있었다. 앞에 위치한 상자와 보조 컨테이너 벨트를 모두 체크해야 했고 두 곳에서 찾을 수 없는데 앞에 위치한 상자보다 실어야 할 상자 수가 더 작다면 더 실을 수 있는 가능성이 없기 때문에 바로 return 처리 했다.
import java.util.*;
class Solution {
public int solution(int[] order) {
int answer = 0;
Deque<Integer> stk = new ArrayDeque<>();
// index는 1부터 시작하는데
int index = 1;
// order 반복문을 돌면서
for(int i = 0; i<order.length; i++){
int curr = order[i];
//System.out.println("==================");
//System.out.println("지금 숫자는: "+curr);
// index 또는 보조 컨테이너에서 꺼낼 수 있는 수와 하나라도 일치하면 answer++;
// 스택에 있는 제일 위의 수와 같다면
if(!stk.isEmpty() && stk.peek()==curr){
//System.out.println("보조컨테이너에서 찾았어: "+stk.peek());
stk.pop();
answer++;
}// 지금 싣게 될 박스 번호와 같다면
else if(index==curr){
//System.out.println("index랑 같아오 :"+index);
answer++;
index++;
}// 두 곳 모두에서 찾을 수 없는데 컨테이너 벨트에 있는 박스 숫자가 더 작다면
else if(index<curr){
while(index<curr){
//System.out.println("보조컨테이너에 넣었어요: "+ index);
stk.push(index++);
}
if(index==curr) {
answer++;
index++;
}
}else break; // 어느 곳에서도 찾을 수 없고 대상 박스 숫자보다 컨베이어벨트 숫자가 더 크다면 중단
}
return answer;
}
}
반응형