
처음 풀 때는 아예 문제 이해를 잘못했었다.
그래서 보조 컨테이너 stack에 order을 넣고 있었다.
그러다 문제 다시 읽어보고 틀린 거 파악함
실제 시험이였으면 이 문제는........... 따흑
암튼 보조 컨테이너 stack에 현재 들어오고 있는 박스를 넣는 풀이 방식으로 풀었다. 그러나~ 두둥!
import java.util.*;
class Solution {
public int solution(int[] order) {
int answer = 0;
//보조 컨테이너 벨트
Stack<Integer> stack = new Stack<>();
//트럭에 담겨야 할 박스
int i = 0;
//현재 박스
int box = 1;
while(box<=order.length) {
//트럭에 들어가야 하는 박스
int truck = order[i];
//현재 들어온 박스가 트럭에 실을 수 있다면
if(box == truck) {
box++;
i++;
answer++;
}
//보조 컨테이너에 있다면
else if(!stack.isEmpty() && stack.peek() == truck) {
while(stack.peek() == truck) {
stack.pop();
i++;
answer++;
}
}
//트럭에 실을 수 없다면
else {
stack.push(box);
box++;
}
}
return answer;
}
}
테스트 1
입력값 〉 [4, 3, 1, 2, 5]
기댓값 〉 2
실행 결과 〉 테스트를 통과하였습니다.
테스트 2
입력값 〉 [5, 4, 3, 2, 1]
기댓값 〉 5
실행 결과 〉 실행한 결괏값 1이 기댓값 5과 다릅니다.
테스트 결과 (~˘▾˘)~
2개 중 1개 성공
틀리니깐 (~˘▾˘)~ <- 이 표정도 좀 열받음
예시 보면서 풀었는데 왜 틀렸쥐,, 생각하면서 연습장에 슥슥 풀어보니 예시2에서 보조 컨테이너 벨트에 상자 실컷 다 쌓아놓고 while문이 끝나버려서 트럭에 싣지 않고 끝나버렸다 띠용!
그래서~ 보조 컨테이너 스택에서도 순서에 맞는 상자가 오면 트럭에 싣는 코드를 추가해줬다.
import java.util.*;
class Solution {
public int solution(int[] order) {
int answer = 0;
//보조 컨테이너 벨트
Stack<Integer> stack = new Stack<>();
//트럭에 담겨야 할 박스
int i = 0;
//현재 박스
int box = 1;
while(box<=order.length) {
//트럭에 들어가야 하는 박스
int truck = order[i];
//현재 들어온 박스가 트럭에 실을 수 있다면
if(box == truck) {
box++;
i++;
answer++;
}
//보조 컨테이너에 있다면
else if(!stack.isEmpty() && stack.peek() == truck) {
while(!stack.isEmpty() && stack.peek() == truck) {
stack.pop();
i++;
answer++;
}
}
//트럭에 실을 수 없다면
else {
stack.push(box);
box++;
}
}
//박스 다 넣은 뒤에도 보조 컨테이너에 실을 수 있는 게 있을 수 있음
while (!stack.isEmpty() && stack.peek() == order[i]) {
stack.pop();
i++;
answer++;
}
return answer;
}
}
정답!
쉬워보였는데 빡셌다
지금 보니 같은 코드가 반복되네...? 진짜 가독성 빵점이자너 (~˘▾˘)~
하지만 이 방법 말고는 떠오른 게 없었다. 다른 사람들 풀이 염탐 좀 해야쓰겄다.
가독성있게 코드 줄이는 방법도 공부해야겠다. 떼잉