Codlilty # 8 Fish

고독한 키쓰차·2021년 7월 21일
0

코딩테스트

목록 보기
10/16

와 예외 케이스 다 생각했어야 했던 문제... 좀 짜증나기도 하고 귀찮은 문제지만 중요한 문제다.

우선 아이디어가 스택 인건 금방 잡았다. 그래서 예외 케이스를 다 나눠서 생각했고, 예외 케이스가 너무 많아서 자꾸 틀렸다. 그러다보니 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());
    }
}
profile
Data Scientist or Gourmet

0개의 댓글