작심삼일

[LeetCode] 997 | Find the Town Judge | Python 본문

스터디/코테

[LeetCode] 997 | Find the Town Judge | Python

yun_s 2022. 1. 3. 09:41
728x90
반응형

문제 링크: https://leetcode.com/problems/find-the-town-judge/


문제

In a town, there are n people labeled from 1 to n. There is a rumor that one of these people is secretly the town judge.

If the town judge exists, then:

  1. The town judge trusts nobody.
  2. Everybody (except for the town judge) trusts the town judge.
  3. There is exactly one person that satisfies properties 1 and 2.

You are given an array trust where trust[i] = [$a_i, b_i$] representing that the person labeled $a_i$ trusts the person labeled $b_i$.

Return the label of the town judge if the town judge exists and can be identified, or return -1 otherwise.


조건

  • 1 <= n <= 1000
  • 0 <= trust.length <= 104
  • trust[i].length == 2
  • All the pairs of trust are unique.
  • ai != bi
  • 1 <= ai, bi <= n

내 풀이

먼저 trust 배열이 없을 경우, n=1이면 1을 리턴하고 그 외의 경우는 -1이 리턴된다.

trust배열을 이용해 [$a_i, b_i$]가 있을 때 $b_i$를 신뢰하는 사람들을 모아둔 배열(rT)를 만든다.

그 배열에서 rT[i]=n-1일 때, 모든 사람이 i를 신뢰한다.

이 때, i가 신뢰하는 다른 사람이 존재한다면 -1을 리턴하고, 그렇지 않다면 i를 리턴하면 된다.

rT[i]=n-1인 i가 존재하지 않는다면 -1을 리턴한다.


코드

class Solution:
    def findJudge(self, n: int, trust: List[List[int]]) -> int:
        if not trust:
            if n == 1:
                return 1
            else:
                return -1
        
        rT = [[] for _ in range(n+1)]
        for a, b in trust:
            rT[b].append(a)
        
        for i in range(1, n+1):
            if len(rT[i]) == n-1:
                for t in range(1, n+1):
                    if i in rT[t]:
                        return -1
                    
                return i
        
        return -1
728x90
반응형
Comments