(1).백준 2660번 회장 뽑기는 가장 사람들과 많이 아는 사람을 회장으로 뽑아야 하는 문제였다.

 

각 관계는 플로이드 워셜을 통해서 빠르게 해결할 수 있었는데

이번에는 ㅍ한번도 이전에 푼 문제를 참조하지 않고 바로 플로이드-워셜을 적용할 수 있었다.

 

나온 결과문에서 각각의 사람마다 가장 먼 관계를 Math.max와 구조분해 할당을 통해 구해줬고

그 중 가장 작은 값을 다시 Math.min과 구조분해할당으로 구한 다음

해당 값을 가진 사람들을 배열에 담아서 숫자와 각각의 사람 index를 출력해서 문제를 해결할 수 있었다.

const input = `5
1 2
2 3
3 4
4 5
2 4
5 3
-1 -1`.split('\n')

const vertex = Number(input[0])
const map = []
const point = []

for(let i = 0 ; i < vertex ; i++){
    map.push(new Array(vertex).fill(50))
    map[i][i] = 1
}

for(let i = 1 ; i < input.length - 1 ; i++){
    const [start, end] = input[i].split(' ').map(Number)
    map[start-1][end-1] = 1
    map[end-1][start-1] = 1
}

for(let i = 0 ; i < vertex ; i++){
    for(let j = 0 ; j < vertex ; j++){
        for(let k = 0 ; k < vertex ; k++){
            map[j][k] = Math.min(map[j][k], map[j][i] + map[i][k])
        }
    }
}

for(let i = 0 ; i < vertex ; i++){
    point.push(Math.max(...map[i]))
}

const results = []
const limit = Math.min(...point)

for(let i = 0 ; i < vertex ; i++){
    if(point[i] == limit){
        results.push(i+1)
    }
}

console.log(limit, results.length)
console.log(...results)

'회고' 카테고리의 다른 글

[개발일지] - 406  (0) 2024.08.12
[개발일지] - 405(주말)  (0) 2024.08.11
[개발일지] - 403  (0) 2024.08.10
[개발일지] - 402  (0) 2024.08.08
[개발일지] - 401  (0) 2024.08.07

+ Recent posts