문제 풀이 방식
LinkedList로 Graph를 구현하여 풀이
주의할 점
엣지 케이스를 주의 할 것, 시간 복잡도를 신경 쓸 것
그래프 문제를 많이 경험해보지 못해서 순수 구현으로 푼 느낌이다.
다른 discuss를 보고 풀이를 참고해서 다시 풀어봐야 할 것 같음..
소스코드
class Solution {
LinkedList<LinkedList> res = new LinkedList();
int sizeFlag = 0;
public int findJudge(int N, int[][] trust) {
if(N == 1) return 1;
makeGraph(N, trust);
LinkedList judgeList = findByJundgeList();
if(sizeFlag > 1) return -1;
return findByJudge(judgeList);
}
public int findByJudge(LinkedList<Integer> judgeList){
for(int i=0; i<judgeList.size(); i++){
int judgeNum = judgeList.get(i);
int flag = 0;
for(int j=0; j<res.size(); j++){
if(res.get(j).size() == 0) continue;
LinkedList list = res.get(j);
for(int k=0; k<list.size(); k++){
// System.out.println("judgeNum " + judgeNum + " listNum " + list.get(k));
if((int)list.get(k) == judgeNum){
flag = 1;
}
}
if(flag == 1){
continue;
} else {
break;
}
}
if(flag == 1){
return judgeNum;
}
}
return -1;
}
public LinkedList<Integer> findByJundgeList(){
LinkedList judgeList = new LinkedList();
for(int i=0; i<res.size(); i++){
if(res.get(i).size() == 0){
judgeList.add(i+1);
sizeFlag++;
}
}
return judgeList;
}
public LinkedList<LinkedList> makeGraph(int N, int[][] trust){
for(int i=0; i<N; i++){
res.add(new LinkedList());
}
for(int i=0; i<trust.length; i++){
LinkedList list = res.get(trust[i][0]-1);
list.add(trust[i][1]);
}
return res;
}
}
'Leetcode 100문제 도전' 카테고리의 다른 글
[Leetcode 16/100] Online Stock Span - Medium (1) | 2021.01.14 |
---|---|
[Leetcode 15/100] Course Schedule - Medium (0) | 2021.01.14 |
[Leetcode 13/100] Minimum Absolute Difference in BST - Easy (0) | 2021.01.11 |
[Leetcode 12/100] Maximum Subarray - Easy (0) | 2021.01.10 |
[Leetcode 11/100] First Bad Version - Easy (0) | 2021.01.10 |