ํด๋น ๊ฒ์๋ฌผ์ longroadhome ๋์ velog๋ฅผ ์ฐธ๊ณ ํ์ฌ ์์ฑ๋์์์ ๋ฐํ๋๋ค.
ํด๋น ๋ฌธ์ ๋ ๋ชจ๋ ๊ฒฝ๋ก๋ก ํฅํ๋ ์ต๋จ ๊ฑฐ๋ฆฌ๋น์ฉ์ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ฏ๋ก
ํ๋ก์ด๋-์์ฌ
์๊ณ ๋ฆฌ์ฆ์ด ํ์ํ ๋ฌธ์ ์ด๋ค.
[๋ณธ ๋ฌธ์ ๋ ์ ํ์ฑ๊ณผ ํจ์จ์ฑ ํ ์คํธ ๊ฐ๊ฐ ์ ์๊ฐ ์๋ ๋ฌธ์ ์ ๋๋ค.]
๋ฐค๋ฆ๊ฒ ๊ท๊ฐํ ๋ ์์ ์ ์ํด ํญ์ ํ์๋ฅผ ์ด์ฉํ๋ ๋ฌด์ง
๋ ์ต๊ทผ ์ผ๊ทผ์ด ์ฆ์์ ธ ํ์๋ฅผ ๋ ๋ง์ด ์ด์ฉํ๊ฒ ๋์ด ํ์๋น๋ฅผ ์๋ ์ ์๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํ๊ณ ์์ต๋๋ค. "๋ฌด์ง"๋ ์์ ์ด ํ์๋ฅผ ์ด์ฉํ ๋ ๋๋ฃ์ธ ์ดํผ์น
์ญ์ ์์ ๊ณผ ๋น์ทํ ๋ฐฉํฅ์ผ๋ก ๊ฐ๋ ํ์๋ฅผ ์ข
์ข
์ด์ฉํ๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค. "๋ฌด์ง"๋ "์ดํผ์น"์ ๊ท๊ฐ ๋ฐฉํฅ์ด ๋น์ทํ์ฌ ํ์ ํฉ์น์ ์ ์ ํ ์ด์ฉํ๋ฉด ํ์์๊ธ์ ์ผ๋ง๋ ์๋ ์ ์์ ์ง ๊ณ์ฐํด ๋ณด๊ณ "์ดํผ์น"์๊ฒ ํฉ์น์ ์ ์ํด ๋ณด๋ ค๊ณ ํฉ๋๋ค.
์ ์์ ๊ทธ๋ฆผ์ ํ์๊ฐ ์ด๋ ๊ฐ๋ฅํ ๋ฐ๊ฒฝ์ ์๋ 6๊ฐ ์ง์ ์ฌ์ด์ ์ด๋ ๊ฐ๋ฅํ ํ์๋
ธ์ ๊ณผ ์์์๊ธ์ ๋ณด์ฌ์ฃผ๊ณ ์์ต๋๋ค.
๊ทธ๋ฆผ์์ A
์ B
๋ ์ฌ๋์ ์ถ๋ฐ์ง์ ์ธ 4๋ฒ ์ง์ ์์ ์ถ๋ฐํด์ ํ์๋ฅผ ํ๊ณ ๊ท๊ฐํ๋ ค๊ณ ํฉ๋๋ค. A
์ ์ง์ 6๋ฒ ์ง์ ์ ์์ผ๋ฉฐ B
์ ์ง์ 2๋ฒ ์ง์ ์ ์๊ณ ๋ ์ฌ๋์ด ๋ชจ๋ ๊ท๊ฐํ๋ ๋ฐ ์์๋๋ ์์ ์ต์ ํ์์๊ธ์ด ์ผ๋ง์ธ ์ง ๊ณ์ฐํ๋ ค๊ณ ํฉ๋๋ค.
10
์์ผ๋ก ๋์ผํ๋ฉฐ ์ด๋ ๋ฐฉํฅ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง์ง ์์ต๋๋ค.A
, B
๊ฐ ํฉ์นํ์ฌ ํ์๋ฅผ ์ด์ฉํฉ๋๋ค. ์์ ํ์์๊ธ์ 10 + 24 = 34
์ ์
๋๋ค.A
๊ฐ ํผ์ ํ์๋ฅผ ์ด์ฉํฉ๋๋ค. ์์ ํ์์๊ธ์ 2
์ ์
๋๋ค.B
๊ฐ ํผ์ ํ์๋ฅผ ์ด์ฉํฉ๋๋ค. ์์ ํ์์๊ธ์ 24 + 22 = 46
์ ์
๋๋ค.34 + 2 + 46 = 82
์ ์
๋๋ค.์ง์ ์ ๊ฐ์ n, ์ถ๋ฐ์ง์ ์ ๋ํ๋ด๋ s, A
์ ๋์ฐฉ์ง์ ์ ๋ํ๋ด๋ a, B
์ ๋์ฐฉ์ง์ ์ ๋ํ๋ด๋ b, ์ง์ ์ฌ์ด์ ์์ ํ์์๊ธ์ ๋ํ๋ด๋ fares๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ์ด๋, A
, B
๋ ์ฌ๋์ด s์์ ์ถ๋ฐํด์ ๊ฐ๊ฐ์ ๋์ฐฉ ์ง์ ๊น์ง ํ์๋ฅผ ํ๊ณ ๊ฐ๋ค๊ณ ๊ฐ์ ํ ๋, ์ต์ ์์ ํ์์๊ธ์ ๊ณ์ฐํด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์.
๋ง์ฝ, ์์ ํฉ์น์ ํ์ง ์๊ณ ๊ฐ์ ์ด๋ํ๋ ๊ฒฝ์ฐ์ ์์ ํ์์๊ธ์ด ๋ ๋ฎ๋ค๋ฉด, ํฉ์น์ ํ์ง ์์๋ ๋ฉ๋๋ค.
A
์ ๋์ฐฉ์ง์ , B
์ ๋์ฐฉ์ง์ ์ ์๋ก ๊ฒน์น์ง ์์ต๋๋ค.n x (n-1) / 2
์ดํ์
๋๋ค.6 x 5 / 2 = 15
)f
์์ด๋ผ๋ ๋ป์
๋๋ค.n | s | a | b | fares | result |
---|---|---|---|---|---|
6 | 4 | 6 | 2 | [[4, 1, 10], [3, 5, 24], [5, 6, 2], [3, 1, 41], [5, 1, 24], [4, 6, 50], [2, 4, 66], [2, 3, 22], [1, 6, 25]] | 82 |
7 | 3 | 4 | 1 | [[5, 7, 9], [4, 6, 4], [3, 6, 1], [3, 2, 3], [2, 1, 6]] | 14 |
6 | 4 | 5 | 6 | [[2,6,6], [6,3,7], [4,6,7], [6,5,11], [2,5,12], [5,3,20], [2,4,8], [4,3,9]] | 18 |
์
์ถ๋ ฅ ์#1
๋ฌธ์ ์์์ ๊ฐ์ต๋๋ค.
์
์ถ๋ ฅ ์#2
B
๋ 3โ2โ1
, A
๋ 3โ6โ4
๊ฒฝ๋ก๋ก ๊ฐ์ ํ์๋ฅผ ํ๊ณ ๊ฐ๋ ๊ฒ์ด ์ต์ ์์ ํ์์๊ธ์
๋๋ค.(3 + 6) + (1 + 4) = 14
์ ์
๋๋ค.์
์ถ๋ ฅ ์#3
A
์ B
๊ฐ 4โ6
๊ตฌ๊ฐ์ ํฉ์นํ๊ณ B
๊ฐ 6๋ฒ ์ง์ ์์ ๋ด๋ฆฐ ํ, A
๊ฐ 6โ5 ๊ตฌ๊ฐ์ ํผ์ ํ๊ณ ๊ฐ๋ ๊ฒ์ด ์ต์ ์์ ํ์์๊ธ์
๋๋ค.
๋ฐ๋ผ์ ์ต์ ์์ ํ์์๊ธ์ 7 + 11 = 18
์ ์
๋๋ค.
function solution(n, s, a, b, fares) {
// ์ด๊ธฐ๋ ์ต๋จ๊ฒฝ๋ก ์์์ผ๋ก ์ค์
const board = new Array(n).fill().map(_ => new Array(n).fill(Infinity));
// ๋ณธ์ธ์๊ฒ ์ค๋ ๊ฒฝ๋ก์ ๋น์ฉ์ ์์์ฒ๋ฆฌ
for(let i = 0 ; i < n; i ++) {
board[i][i] = 0
}
fares.forEach(pos => {
const [x, y, weight] = pos;
// ํด๋น ์ขํ๋ก ๊ฐ๋, ํด๋น ์ขํ๋ก ์ค๋ ๋น์ฉ ์ฑ
์
board[x-1][y-1] = weight;
board[y-1][x-1] = weight;
});
// ํ๋ก์ด๋-์์ฌ ์๊ณ ๋ฆฌ์ฆ
for(let k = 0; k < n; k++) {
for(let i = 0; i < n; i++) {
for(let j = 0; j < n; j++) {
// ๊ฒฝ์ ํด์ ๊ฐ๋ ๋น์ฉ์ด ๋ฐ๋ก ๊ฐ๋ ๋น์ฉ๋ณด๋ค ์ ๋ ดํ๋ค๋ฉด
if(board[i][k] + board[k][j] < board[i][j])
board[i][j] = board[i][k] + board[k][j];
}
}
}
// ์์์ ์ ๊ธฐ์ค์ผ๋ก a, b๊ฐ ๋ฐ๋ก ๊ฐ๋ ์ต๋จ ๋น์ฉ
let answer = board[s-1][a-1] + board[s-1][b-1];
for(let i = 0; i < n; i++) {
// s์์ n๊น์ง ํฉ์น ํ a, b๊ฐ ๊ฐ๊ฐ ๊ฐ๋ ๊ฒฝ์ฐ
const shortest = board[s-1][i] + board[i][a-1] + board[i][b-1];
// ๊ธฐ์กด๊ฐ๊ณผ ์๋ก ๊ณ์ฐ๋ ๊ฐ ์ค ๋ ์์ ๊ฐ์ผ๋ก ๊ฐฑ์
answer = Math.min(answer, shortest);
}
return answer;
}