var findJudge = function (n, trust) {
let obj = {};
// 추가적으로 모든 사람이 judge를 믿는 경우 / 믿지 않는 경우를 생각했어야 함.
for (let k = 0; k < n; k++) obj[k + 1] = 0; // obj 프로퍼티의 value를 0으로 초기화
for (let i = 0; i < trust.length; i++) {
// obj[trust[i][0]] = 1;
// judge는 절대 첫 번째에 나올 수 없다.
obj[trust[i][0]]--;
// 또한 judge는 모든 사람의 신뢰를 얻고 있어야 한다.
obj[trust[i][1]]++;
}
console.log(obj);
for (const [key, value] of Object.entries(obj)) {
// if(value === 0) return key
// 그럼 judge는 모든 사람의 신뢰를 얻고 있으니 value는 항상 n-1일 것이다.
if (value === n - 1) return key;
}
return -1;
};
// Discuss
var findJudge = function (n, trust) {
const counts = new Array(n + 1).fill(0);
for (let [i, j] of trust) {
counts[i]--;
counts[j]++;
}
console.log(counts);
for (let i = 1; i < counts.length; i++) {
if (n - 1 === counts[i]) return i;
}
return -1;
};
// testCase
let n = 4;
let trust = [
[1, 3],
[1, 4],
[2, 3],
[2, 4],
[4, 3],
];
findJudge(n, trust);
Directed Graph에 관련된 문제였다. 그러나 Graph에 대한 개념을 모르더라도 접근은 가능할 것 같았던 문제였다.
Hash를 사용하여 풀었다. 위에 주석 처리된 코드들은 내가 모든 사람이 judge를 믿지 않는 경우 / 믿는 경우를 판별하는 조건을 생각하지 못했을 때 적었던 코드들이다.
https://leetcode.com/problems/find-the-town-judge/
https://github.com/tTab1204/LeetCode/tree/main/%EC%A3%BC%EC%98%81