와 예외 케이스 다 생각했어야 했던 문제... 좀 짜증나기도 하고 귀찮은 문제지만 중요한 문제다.
우선 아이디어가 스택 인건 금방 잡았다. 그래서 예외 케이스를 다 나눠서 생각했고, 예외 케이스가 너무 많아서 자꾸 틀렸다. 그러다보니 if문이 너무 많아졌고 꽤나 복잡한 코드가 되어버렸다.
과연 이렇게 푸는게 정석 풀이일지 의문이다....
import java.util.*;
class Solution {
public static class Node{
int no;
int dir;
public Node(int no, int dir) {
this.no = no;
this.dir = dir;
}
}
public int solution(int[] A, int[] B) {
int N = B.length;
Node[] list = new Node[N];
for(int i = 0; i < N; i++) {
list[i] = new Node(i,B[i]);
}
Stack<Node> stack = new Stack<Node>();
stack.push(list[0]);
Node temp;
boolean flag = false;
for(int num = 1; num < N; num++) {
temp = stack.peek();
flag = false;
while(temp.dir == 1 && !stack.isEmpty() ) {
if(B[num] == 0) {
if(A[temp.no] < A[num]) { //뒤에 물고기가 잡아 먹는 경우
stack.pop();
if(!stack.isEmpty()){
temp = stack.peek();
}
}else {
flag= true;
break;
}
}else {
break;
}
}
if(flag) {
continue;
}
stack.push(list[num]);
}
return(stack.size());
}
}