
내가 작성한 코드
import java.util.*;
class Solution {
public int solution(int[] order) {
Stack<Integer> container = new Stack<>(); // 기존 컨테이너
// 기존 컨테이너 추가
for (int i = order.length; i > 0; i--) {
container.push(i);
}
Stack<Integer> subContainer = new Stack<>(); // 서브 컨테이너
int answer = 0;
for (int i = 0; i < order.length;) {
// 기본 컨테이너랑 order의 맨 앞이 같은 경우
if (!container.isEmpty() && order[i] == container.peek()) {
container.pop();
answer++;
i++;
continue;
}
// 서브 컨테이너의 앞과 order의 맨 앞이 같은 경우
if (!subContainer.isEmpty() && subContainer.peek() == order[i]) {
subContainer.pop();
answer++;
i++;
continue;
}
// 메인 컨테이너가 비었고 서브 컨테이너의 앞과 order의 맨 앞이 다른 경우 >> 더이상 담기 불가
if(container.isEmpty() && subContainer.peek() != order[i]) {
break;
}
subContainer.push(container.pop()); // 기본 컨테이너를 서브 컨테이너에 추가 >> 상자 옮기기
}
return answer;
}
}
다른 사람의 코드
import java.util.*;
class Solution {
public int solution(int[] order) {
int idx = 0;
int answer = 0;
Stack<Integer> sub = new Stack<>(); // 서브 컨테이너
for (int i = 0; i < order.length; i++) {
sub.add(i + 1); // 서브 컨테이너로 미리 옮기고
while (!sub.isEmpty()) {
if (sub.peek() == order[idx]) { // 서브컨테이너랑 order랑 같으면
sub.pop();
answer++; // 트럭에 담기
idx++; // 다음 비교를 위한 인덱스 증가
} else
break;
}
}
return answer;
}
}
Share article