[JavaScript] 백준 1058 : 친구
2022. 9. 29. 12:54ㆍAlgorithm/백준
level : silver 2
문제 링크 : 친구
1058번: 친구
지민이는 세계에서 가장 유명한 사람이 누구인지 궁금해졌다. 가장 유명한 사람을 구하는 방법은 각 사람의 2-친구를 구하면 된다. 어떤 사람 A가 또다른 사람 B의 2-친구가 되기 위해선, 두 사람
www.acmicpc.net
My Solution
let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
const N = Number(input.shift());
input = input.map(str=>str.split(''));
let max = 0;
input.forEach((arr,i)=>{
const temp = [];
arr.forEach((val,index)=>{
if(val==='Y')
temp.push(index);
});
let list = new Set(temp);
temp.forEach(v=>{
input[v].forEach((str,ind)=>{
if(str==='Y')
list.add(ind);
});
})
list.delete(i);
let count = list.size;
if(max<count)
max = count;
})
console.log(max);
풀이방법
처음에 N과 input으로 나누었다. N은 사람 수이며 input은 각 사람들의 관계를 나타내는 N x N인 2D matrix이다.
첫 max는 0으로 초기화 하였다.
각 줄마다 한 사람의 친구 관계이며 'Y'라고 되어 있는 index를 temp라는 array에 push하였다.
temp를 이용하여 list라는 Set Object를 생성하였다. temp의 원소들에 대한 값을 v라 할 때, input[v]의 값을 이용하여 친구의 친구들을 list에 추가한다.(이 때, Set Object이기에 중복이 사라진다.)
모두 추가 후 자신의 index를 삭제한다.
그 후 list의 사이즈가 크다면 그 값을 max로 초기화한다.
느낀점
처음에는 갯수를 세어 자기 자신을 빼는 행위인 1을 감소시키면 되는 줄 알았으나 중간에 중복이 생겨서 다른 방법을 강구했다.
하지만 조금씩 알고리즘을 생각하는 사고가 길러지는 것 같았다.
'Algorithm > 백준' 카테고리의 다른 글
| [JavaScript] 백준 1038 : 감소하는 수 (0) | 2022.10.09 |
|---|---|
| [JavaScript] 백준 1138 : 한 줄로 서기 (0) | 2022.10.06 |
| [JavaScript] 백준 1074 : Z (1) | 2022.09.29 |
| [JavaScript] 백준 11725 : 트리의 부모 찾기 (0) | 2022.09.02 |
| [JavaScript] 백준 11660 : 구간 합 구하기 5 (0) | 2022.08.12 |