import java.util.*;
class Solution {
// private static List<List<Integer>> graph = new ArrayList<>();
private static boolean[][] graph;
public int solution(int n, int[][] results) {
graph = new boolean[n+1][n+1];
//초기화 계속
for(int[] result : results){
graph[result[0]][result[1]] = true;
}
int count = 0;
for(int i=1 ; i<=n ; i++){
int wins = countWin(i, new boolean[n+1], n);
int loses = countLose(i, new boolean[n+1], n);
if(wins + loses + 1 == n) ++count;
}
return count;
}
private static int countWin(int playerIdx, boolean[] visited, int n){
int count = 0;
for(int i=1; i<=n ; i++){
//방문했는가? 다음꺼 본다.
if(visited[i]) continue;
//트루인가? 트루면 이겼다는 뜻이다!
if(graph[playerIdx][i]) {
//방문표시한다.
visited[i] = true;
count += countWin(i, visited, n);
}
}
return count;
}
private static int countLose(int playerIdx, boolean[] visited,int n){
int count = 0;
for(int i=1; i<=n ; i++){
//방문했는가? 다음꺼 본다.
if(visited[i]) continue;
//트루인가? 트루면 이겼다는 뜻이다!
if(graph[i][playerIdx]) {
//방문표시한다.
visited[i] = true;
count += countLose(i, visited, n);
}
}
return count;
}
}
/*
4가 3을 이긴다
4가 2를 이긴다
3가 2를 이긴다
1이 2를 이긴다
2가 5를 이긴다
4 -> 3
| |
| v
| -> 2<-1
|
v
5
*/