Leetcode Java Find Champion II
업데이트:
문제
코드
class Solution {
public int findChampion(int n, int[][] edges) {
boolean[] weak = new boolean[n];
for (int[] edge : edges) {
weak[edge[1]] = true;
}
int result = -1;
for (int i = 0; i < n; i++) {
if (!weak[i]) {
if (result == -1) {
result = i;
} else {
return -1;
}
}
}
return result;
}
}
결과
설명
- n개의 팀이 있는 DAG(순환되지 않는 연결 선)이 저장된 edges를 이용하여 아래 규칙대로 토너먼트에서 우승할 팀을 구하는 문제이다.
- edges 내 임의 값인 edge = [i, j]로, i 팀이 j 팀보다 강한 것을 의미한다.
- 우승할 한 팀이 존재하지 않는 경우, -1을 주어진 문제의 결과로 반환한다.
- 문제 풀이에 필요한 변수를 정의한다.
- weak는 약한 팀을 구분할 변수로, n 크기의 부울 배열로 초기화하고 edges의 각 두 번째 값들의 위치에 true를 넣어준다.
- result는 토너먼트 우승 팀을 저장할 변수로, 존재하지 않을 경우 반환할 값인 -1로 초기화한다.
- 0부터 n 미만까지 i를 감소시키며 아래를 반복한다.
- weak[i]의 값이 false인 자신보다 강한 팀이 없는 경우, 아래를 수행한다.
- result가 -1인 지금까지 우승할 팀이 존재하지 않으면, 현재 위치인 i를 넣어준다.
- 위의 경우가 아니라면 강한 척도를 구분할 수 없는 팀이 둘 이상이므로, -1을 주어진 문제의 결과로 반환한다.
- weak[i]의 값이 false인 자신보다 강한 팀이 없는 경우, 아래를 수행한다.
- 반복이 완료되면 토너먼트 우승할 팀이 저장된 result를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기