[์นด์นด์˜ค ๋ธ”๋ผ์ธ๋“œ 2021] ํ•ฉ์Šน ํƒ์‹œ ์š”๊ธˆ :: c++ ์ฝ”๋“œ, ๋ฌธ์ œ ํ•ด์„, ํ”Œ๋ฃจ์ด๋“œ ์™€์ƒฌ

ํ•ฉ์Šน ํƒ์‹œ ์š”๊ธˆ

๋‚œ์ด๋„ : โ˜…โ˜…โ˜…โ˜†โ˜†

๊ฑธ๋ฆฐ ์‹œ๊ฐ„ : ๋ชป ํ’€์—ˆ์Œ

๋ฌธ์ œ

ํ•ฉ์Šน ํƒ์‹œ ์š”๊ธˆ ๋งํฌ

 

ํ•ด์„ค

๊ทธ๋ž˜ํ”„ ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ dijkstra๋‚˜ floyd-warshal ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด์šฉ

  • ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜

    • ๋ชจ๋“  ์ •์  => ๋ชจ๋“  ์ •์  ์ตœ๋‹จ ๊ฒฝ๋กœ ๊ตฌํ•˜๊ธฐ
    • d[i][j] = i๋ถ€ํ„ฐ j๊นŒ์ง€์˜ ์ตœ์ € ํƒ์‹œ ์š”๊ธˆ
    • min(d[s][k]+d[k][a]+d[k][b])๋ฅผ ๊ตฌํ•˜๋ฉด ๋จ
  • ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜

    • ํ•œ ์ •์  => ๋ชจ๋“  ์ •์  ์ตœ๋‹จ ๊ฒฝ๋กœ ๊ตฌํ•˜๊ธฐ
    • ๋ฐฐ์—ด(dist)๊ณผ ์šฐ์„ ์ˆœ์œ„ ํ(qp)๋ฅผ ์ด์šฉํ•ด์„œ ์ฒซ ์ •์ ๋ถ€ํ„ฐ ๊ฐ ๋…ธ๋“œ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๋ฐฐ์—ด์— ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ์‹
    • ์šฐ์„ ์ˆœ์œ„ ํ์— ๋‹ค์Œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ๋“ค์„ ๋„ฃ์œผ๋ฉด์„œ ํ•ด๋‹น ๊ฑฐ๋ฆฌ๋ฅผ dist ๋ฐฐ์—ด์—์„œ ๊ฐฑ์‹ ํ•˜๋Š” ๋ฐฉ์‹
    • a, b ๊ฐ๊ฐ์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋น„์šฉ๊ณผ ํŠน์ • ์ง€์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋น„์šฉ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๊ฒƒ์„ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์ถ”์ถœ

 

์ฝ”๋“œ

์ฝ”๋“œ๋Š” ๋ชจ๋‘ ์ด๊ณณ์„ ์ฐธ์กฐํ•จ.

ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด์šฉ

#include <string>
#include <vector>

using namespace std;

int graphMap[201][201];

int solution(int n, int s, int a, int b, vector<vector<int>> fares) {

    for(int i=0; i<201; i++){
        for(int j=0; j<201; j++){
            graphMap[i][j] = 1e8;
            if(i==j)
                graphMap[i][j] = 0;
        }
    }

    for(int i=0; i<fares.size(); i++){
        graphMap[fares[i][0]][fares[i][1]] = fares[i][2];
        graphMap[fares[i][1]][fares[i][0]] = fares[i][2];
    }

    for(int i=0; i<=n; i++){
        for(int j=0; j<=n; j++){
            for(int k=0; k<=n; k++){
                graphMap[j][k] = min(graphMap[j][k], graphMap[j][i]+graphMap[i][k]);
            } 
        }
    }

    int answer = 1e9;

    for(int i=0; i<=n; i++){
        answer = min(answer, graphMap[s][i]+graphMap[i][a]+graphMap[i][b]);
    }

    return answer;
}
๋ฐ˜์‘ํ˜•