[JavaScript] 백준 1058 : 친구

2022. 9. 29. 12:54Algorithm/백준

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을 감소시키면 되는 줄 알았으나 중간에 중복이 생겨서 다른 방법을 강구했다.

하지만 조금씩 알고리즘을 생각하는 사고가 길러지는 것 같았다.