문제가 요상하다...!
1차 코드
import java.util.Stack;
class Solution {
public static void main(String[] args) {
int [] order = {4,3,1,2,5};
solution(order);
}
static int answer = 0;
public static int solution(int[] order) {
boolean flag = true;
int [] truckBox = new int[order.length];
for(int i = 0; i < order.length; i++){
truckBox[i] = i+1;
}
Stack containerStack = new Stack<>();
//첫 번째
for(int i = 1; i < order[0]; i++){
containerStack.push(truckBox[i-1]);
}
answer++;
for(int i = 1; i < order.length; i++){
flag = checkBox(i, order, truckBox, containerStack);
if(flag == false){
break;
}
}
System.out.println(answer);
return answer;
}
private static boolean checkBox(int i, int[] order, int[] truckBox, Stack containerStack) {
boolean flag = false;
int temp = order[i-1] - order[i];
if(temp == 1 || temp == -1){
//1차이가 나면 뽑아서 나옴
if(order[i-1] < order[i] && order[i] < truckBox[order.length]){
//1보다 2가 크면 아직 stack에 안 들어감
for(int j = order[i-1]+1; j < order[i]; j++){
containerStack.push(truckBox[j-1]);
}
answer++;
flag = true;
}else{
while(containerStack.empty()==false){
if((int)containerStack.peek() == order[i]){
containerStack.pop();
answer++;
flag = true;
break;
}
}
}
}
return flag;
}
}
두 번째 코드는 continue 없이 while & for문 계속 체크하는 구조였음
힌트 보고 최종본 ...
import java.util.Stack;
class Solution {
public static void main(String[] args) {
int [] order = {4,3,1,2,5};
solution(order);
}
public static int solution(int[] order) {
int answer = 0;
Stack<Integer> conStack = new Stack<>();
int i = 0;
for(int box = 1; box <= order.length; box++)
{
if(order[i] != box){
//0부터 시작 -> box와 같지 않을 경우 스택에 넣음
conStack.add(box);
continue;
}
//box 같아질 때까지 계속 컨테이너에 넣다가 i 증가시키고 나서 정답도 하나 추가함
i++;
answer++;
while (conStack.size() != 0 && order[i] == conStack.peek())
{
//continue를 안 쓰면 이 while문을 매번 체크하니까 continue를 씀
//컨테이너 벨트가 비어있지 않고 && 스택의 맨 마지막 애가 현재 order[i] 랑 같으면 실행
conStack.pop();
i++;
answer++;
}
}
return answer;
}
}
똑똑박사!
굳이 첫번째 값을 따로 처리하지 않고 반복문의 논리가 필요...
(근데 사실 이거 문제가 인간이 읽기 힘들게 내신 것은 인정해야 합니다...)
난이도 높은 문제 골라서 풀고 있는데, 이게... 문제 자체가 설명이 어렵게 되어 있어서
답글삭제이해하기가 머리가 아픈 경우가 많음...
같은 말을 여러 번 써 놓는다거나, 이해되지 않는 말을 씀 ㅠ
하지만 내가 아쉬우니까 분석력을 더 키워봅니다...