YataNox
[Java] Lv.2 택배상자 본문
문제
문제 풀이
스택(서브 컨테이너)을 활용해야하는 문제이다.
1. 메인 컨테이너에서 꺼낼 수 있는 박스가 기사가 원하는 박스(이하 기사 박스)보다 작으면 다른 것을 고려할 필요가 없고 현재 컨테이너의 박스를 서브 컨테이너에 담으면 된다.
2. 메인 컨테이너와 기사 박스가 같다면 정답을 +1 하고 다음 박스를 검사한다.
3. 12를 제외한 상황은 서브컨테이너를 확인해야하는 상황이다.
3-2. 서브 컨테이너에서 꺼낼 수 있는 박스와 기사 박스가 같다면 2와 같이 정답을 +1 처리하고 다음 박스를 검사한다.
4. 서브 컨테이너와 기사 박스도 다르다면 더이상 담을 수 있는 박스가 없다. 종료한다.
자바 코드
import java.util.*;
class Solution{
private Stack<Integer> subTrailer = new Stack<>();
public int solution(int[] order) {
int answer = 0;
int curOrder = 1;
int p = 0;
while(true){
if(p == order.length)
break;
// 현재 메인 컨테이너 택배보다 기사가 원하는 택배 번호가 더 크면
// 서브 컨테이너에 현재 택배를 넣고 스킵
if(curOrder < order[p]){
subTrailer.add(curOrder++);
continue;
}
// 현재 메인컨테이너의 택배와 기사가 원하는 택배가 같으면
// 꺼내고 다음
if(curOrder == order[p]){
curOrder++;
answer++;
p++;
continue;
}
// 기사가 원하는 택배보다 메인 컨테이너 박스가 더 큰 상황
// 서브 컨테이너를 확인하고 여기도 없으면 종료
if(subTrailer.isEmpty())
break;
else {
// 서브 컨테이너 박스가 기사가 원하는 택배와 같으면
// 꺼내고 다음
if(subTrailer.peek() == order[p]){
subTrailer.pop();
p++;
answer++;
continue;
}else{ // 여기도 다르면 종료
break;
}
}
}
return answer;
}
}
'코딩 테스트 > PROGRAMMERS' 카테고리의 다른 글
[Java] Lv.3 정수 삼각형 (0) | 2024.07.22 |
---|---|
[Java] Lv.2 연속 부분 수열 합의 개수 (0) | 2024.06.20 |
[Java] Lv.2 롤케이크 자르기 (0) | 2024.06.18 |
[Java] Lv.2 우박수열 정적분 (0) | 2024.06.18 |
[Java] Lv.2 숫자 카드 나누기 (0) | 2024.06.18 |