홈 LeetCode 997. 마을 판사 찾기
글
취소

LeetCode 997. 마을 판사 찾기

image

문제 링크

차수로 판별하기

신뢰 관계 [a, b]를 사람 a에서 사람 b로 향하는 방향 간선으로 보자. 마을 판사는 누구도 신뢰하지 않으므로 진출 차수가 0이다. 또한 나머지 모든 사람이 판사를 신뢰하므로 진입 차수는 n - 1이다. 두 조건을 모두 확인해야 한다. 진입 차수만으로 판별하면 다른 사람을 신뢰하는 사람을 판사로 잘못 고를 수 있다.

모든 사람의 진입 차수와 진출 차수를 센 다음 두 조건을 만족하는 사람을 반환한다. n == 1이면 유일한 사람의 진입·진출 차수가 모두 0이므로, 신뢰 관계가 없을 때에만 조건이 성립한다. 따라서 별도 분기 없이 같은 탐색으로 이 경우를 처리할 수 있다. 조건에 맞는 사람이 없으면 -1을 반환한다.

신뢰 관계 m = trust.length개를 한 번씩 처리하고 사람 n명을 확인하므로 시간 복잡도는 O(n + m)이다. 두 차수 배열의 공간 복잡도는 O(n)이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
    public int findJudge(int n, int[][] trust) {
        int[] indegree = new int[n + 1];
        int[] outdegree = new int[n + 1];

        for (int[] relation : trust) {
            outdegree[relation[0]]++;
            indegree[relation[1]]++;
        }

        for (int person = 1; person <= n; person++) {
            if (outdegree[person] == 0 && indegree[person] == n - 1) {
                return person;
            }
        }
        return -1;
    }
}
이 글은 저자가 CC BY 4.0 라이선스로 배포합니다.