Algorithm/LeetCode

[Quiz] Find-Eventual-Safe-States

2021.05.18 - [개발 공부/코딩 테스트] - [LeetCode] - Find Eventual Safe States

코테스터디에서 위 문제를 풀기위해 퀴즈를 내주셨다

 

Go로 적어주셨다

func eventualSafeNodes(graph [][]int) []int {
    result := []int{}
    for i, _ := range graph{
        compare := 0
        stack := []int{}
        check := i
      for len(graph[check]) != 0 || len(stack) > 0 {    //len( list ) -> list의 갯수.
            compare += 1    
            stack = append(stack, graph[check]...)    // graph[check]의 경우 리스트여서 리스트 + 리스트 해줄때는 ...을 써줍니다.
            if compare > i {            
                break
            }
            check = stack[0]
            stack = stack[1:]            // 하나를 빼내고 지워줍니다.
        }
        if compare <= i {
            result = append(result, i)
        }
    }
    return result
}


어째서 [[],[0,2,3,4],[3],[4],[]] test case는 해결하지 못하는가?
디버깅
하나씩 과정을 되풀이해보자
자바식으로 재해석

 

본인 생각대로 자바 코드로 바꿔보았다.

class Solution {
    public List<Integer> eventualSafeNodes(int[][] graph) {
       ArrayList<Integer> result = new ArrayList<>();
		for(int i = 0; i < graph.length; i++){
		    int compare = 0;
		    Stack<int[]> stack = new Stack<>();
		    int check = i;
		    if(graph[check].length != 0 || stack.size() >0) {
		    	for(int temp : graph[check]) {
		    		compare ++;
		    		stack.add(graph[check]);
		    		if(compare > i) {
		    			break;
		    		}
		    		check = stack.get(0)[0];
		    		stack.pop();
		    	}
		    }
		    if(compare <= i) {
		    	result.add(i);
		    }
		}
        return result.toArray(new Integer[0]);
    }
}

Your input
[[1,2],[2,3],[5],[0],[5],[],[]]
Output
[2,3,4,5,6]
Expected
[2,4,5,6]
내일 에러 왜 나오는지 디버깅 무조건!