
ํด๋น ๊ฒ์๋ฌผ์ 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;
}