[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.3 - ํ•ฉ์Šน ํƒ์‹œ ์š”๊ธˆ (C++)

2023. 9. 5. 01:13ยท๐Ÿ–ฅ๏ธ Study Note/Coding Test

https://school.programmers.co.kr/learn/courses/30/lessons/72413

๋ฌธ์ œ ์„ค๋ช…

[๋ณธ ๋ฌธ์ œ๋Š” ์ •ํ™•์„ฑ๊ณผ ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ ๊ฐ๊ฐ ์ ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.]

๋ฐค๋Šฆ๊ฒŒ ๊ท€๊ฐ€ํ•  ๋•Œ ์•ˆ์ „์„ ์œ„ํ•ด ํ•ญ์ƒ ํƒ์‹œ๋ฅผ ์ด์šฉํ•˜๋˜ ๋ฌด์ง€๋Š” ์ตœ๊ทผ ์•ผ๊ทผ์ด ์žฆ์•„์ ธ ํƒ์‹œ๋ฅผ ๋” ๋งŽ์ด ์ด์šฉํ•˜๊ฒŒ ๋˜์–ด ํƒ์‹œ๋น„๋ฅผ ์•„๋‚„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ฏผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. "๋ฌด์ง€"๋Š” ์ž์‹ ์ด ํƒ์‹œ๋ฅผ ์ด์šฉํ•  ๋•Œ ๋™๋ฃŒ์ธ ์–ดํ”ผ์น˜ ์—ญ์‹œ ์ž์‹ ๊ณผ ๋น„์Šทํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ€๋Š” ํƒ์‹œ๋ฅผ ์ข…์ข… ์ด์šฉํ•˜๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. "๋ฌด์ง€"๋Š” "์–ดํ”ผ์น˜"์™€ ๊ท€๊ฐ€ ๋ฐฉํ–ฅ์ด ๋น„์Šทํ•˜์—ฌ ํƒ์‹œ ํ•ฉ์Šน์„ ์ ์ ˆํžˆ ์ด์šฉํ•˜๋ฉด ํƒ์‹œ์š”๊ธˆ์„ ์–ผ๋งˆ๋‚˜ ์•„๋‚„ ์ˆ˜ ์žˆ์„ ์ง€ ๊ณ„์‚ฐํ•ด ๋ณด๊ณ  "์–ดํ”ผ์น˜"์—๊ฒŒ ํ•ฉ์Šน์„ ์ œ์•ˆํ•ด ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์œ„ ์˜ˆ์‹œ ๊ทธ๋ฆผ์€ ํƒ์‹œ๊ฐ€ ์ด๋™ ๊ฐ€๋Šฅํ•œ ๋ฐ˜๊ฒฝ์— ์žˆ๋Š” 6๊ฐœ ์ง€์  ์‚ฌ์ด์˜ ์ด๋™ ๊ฐ€๋Šฅํ•œ ํƒ์‹œ๋…ธ์„ ๊ณผ ์˜ˆ์ƒ์š”๊ธˆ์„ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆผ์—์„œ A์™€ B ๋‘ ์‚ฌ๋žŒ์€ ์ถœ๋ฐœ์ง€์ ์ธ 4๋ฒˆ ์ง€์ ์—์„œ ์ถœ๋ฐœํ•ด์„œ ํƒ์‹œ๋ฅผ ํƒ€๊ณ  ๊ท€๊ฐ€ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. A์˜ ์ง‘์€ 6๋ฒˆ ์ง€์ ์— ์žˆ์œผ๋ฉฐ B์˜ ์ง‘์€ 2๋ฒˆ ์ง€์ ์— ์žˆ๊ณ  ๋‘ ์‚ฌ๋žŒ์ด ๋ชจ๋‘ ๊ท€๊ฐ€ํ•˜๋Š” ๋ฐ ์†Œ์š”๋˜๋Š” ์˜ˆ์ƒ ์ตœ์ € ํƒ์‹œ์š”๊ธˆ์ด ์–ผ๋งˆ์ธ ์ง€ ๊ณ„์‚ฐํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ทธ๋ฆผ์˜ ์›์€ ์ง€์ ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์› ์•ˆ์˜ ์ˆซ์ž๋Š” ์ง€์  ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • ์ง€์ ์ด n๊ฐœ์ผ ๋•Œ, ์ง€์  ๋ฒˆํ˜ธ๋Š” 1๋ถ€ํ„ฐ n๊นŒ์ง€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์ง€์  ๊ฐ„์— ํƒ์‹œ๊ฐ€ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ๊ฐ„์„ ์ด๋ผ ํ•˜๋ฉฐ, ๊ฐ„์„ ์— ํ‘œ์‹œ๋œ ์ˆซ์ž๋Š” ๋‘ ์ง€์  ์‚ฌ์ด์˜ ์˜ˆ์ƒ ํƒ์‹œ์š”๊ธˆ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • ๊ฐ„์„ ์€ ํŽธ์˜ ์ƒ ์ง์„ ์œผ๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์œ„ ๊ทธ๋ฆผ ์˜ˆ์‹œ์—์„œ, 4๋ฒˆ ์ง€์ ์—์„œ 1๋ฒˆ ์ง€์ ์œผ๋กœ(4→1) ๊ฐ€๊ฑฐ๋‚˜, 1๋ฒˆ ์ง€์ ์—์„œ 4๋ฒˆ ์ง€์ ์œผ๋กœ(1→4) ๊ฐˆ ๋•Œ ์˜ˆ์ƒ ํƒ์‹œ์š”๊ธˆ์€ 10์›์œผ๋กœ ๋™์ผํ•˜๋ฉฐ ์ด๋™ ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ์ƒ๋˜๋Š” ์ตœ์ € ํƒ์‹œ์š”๊ธˆ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.
    • 4→1→5 : A, B๊ฐ€ ํ•ฉ์Šนํ•˜์—ฌ ํƒ์‹œ๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ƒ ํƒ์‹œ์š”๊ธˆ์€ 10 + 24 = 34์› ์ž…๋‹ˆ๋‹ค.
    • 5→6 : A๊ฐ€ ํ˜ผ์ž ํƒ์‹œ๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ƒ ํƒ์‹œ์š”๊ธˆ์€ 2์› ์ž…๋‹ˆ๋‹ค.
    • 5→3→2 : B๊ฐ€ ํ˜ผ์ž ํƒ์‹œ๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ƒ ํƒ์‹œ์š”๊ธˆ์€ 24 + 22 = 46์› ์ž…๋‹ˆ๋‹ค.
    • A, B ๋ชจ๋‘ ๊ท€๊ฐ€ ์™„๋ฃŒ๊นŒ์ง€ ์˜ˆ์ƒ๋˜๋Š” ์ตœ์ € ํƒ์‹œ์š”๊ธˆ์€ 34 + 2 + 46 = 82์› ์ž…๋‹ˆ๋‹ค.

[๋ฌธ์ œ]

์ง€์ ์˜ ๊ฐœ์ˆ˜ n, ์ถœ๋ฐœ์ง€์ ์„ ๋‚˜ํƒ€๋‚ด๋Š” s, A์˜ ๋„์ฐฉ์ง€์ ์„ ๋‚˜ํƒ€๋‚ด๋Š” a, B์˜ ๋„์ฐฉ์ง€์ ์„ ๋‚˜ํƒ€๋‚ด๋Š” b, ์ง€์  ์‚ฌ์ด์˜ ์˜ˆ์ƒ ํƒ์‹œ์š”๊ธˆ์„ ๋‚˜ํƒ€๋‚ด๋Š” fares๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ด๋•Œ, A, B ๋‘ ์‚ฌ๋žŒ์ด s์—์„œ ์ถœ๋ฐœํ•ด์„œ ๊ฐ๊ฐ์˜ ๋„์ฐฉ ์ง€์ ๊นŒ์ง€ ํƒ์‹œ๋ฅผ ํƒ€๊ณ  ๊ฐ„๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๋•Œ, ์ตœ์ € ์˜ˆ์ƒ ํƒ์‹œ์š”๊ธˆ์„ ๊ณ„์‚ฐํ•ด์„œ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

๋งŒ์•ฝ, ์•„์˜ˆ ํ•ฉ์Šน์„ ํ•˜์ง€ ์•Š๊ณ  ๊ฐ์ž ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์˜ˆ์ƒ ํƒ์‹œ์š”๊ธˆ์ด ๋” ๋‚ฎ๋‹ค๋ฉด, ํ•ฉ์Šน์„ ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

[์ œํ•œ์‚ฌํ•ญ]

  • ์ง€์ ๊ฐฏ์ˆ˜ n์€ 3 ์ด์ƒ 200 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ์ง€์  s, a, b๋Š” 1 ์ด์ƒ n ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ด๋ฉฐ, ๊ฐ๊ธฐ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์ž…๋‹ˆ๋‹ค.
    • ์ฆ‰, ์ถœ๋ฐœ์ง€์ , A์˜ ๋„์ฐฉ์ง€์ , B์˜ ๋„์ฐฉ์ง€์ ์€ ์„œ๋กœ ๊ฒน์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • fares๋Š” 2์ฐจ์› ์ •์ˆ˜ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
  • fares ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” 2 ์ด์ƒ n x (n-1) / 2 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ๋“ค์–ด, n = 6์ด๋ผ๋ฉด fares ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” 2 ์ด์ƒ 15 ์ดํ•˜์ž…๋‹ˆ๋‹ค. (6 x 5 / 2 = 15)
    • fares ๋ฐฐ์—ด์˜ ๊ฐ ํ–‰์€ [c, d, f] ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.
    • c์ง€์ ๊ณผ d์ง€์  ์‚ฌ์ด์˜ ์˜ˆ์ƒ ํƒ์‹œ์š”๊ธˆ์ด f์›์ด๋ผ๋Š” ๋œป์ž…๋‹ˆ๋‹ค.
    • ์ง€์  c, d๋Š” 1 ์ด์ƒ n ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ด๋ฉฐ, ๊ฐ๊ธฐ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์ž…๋‹ˆ๋‹ค.
    • ์š”๊ธˆ f๋Š” 1 ์ด์ƒ 100,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
    • fares ๋ฐฐ์—ด์— ๋‘ ์ง€์  ๊ฐ„ ์˜ˆ์ƒ ํƒ์‹œ์š”๊ธˆ์€ 1๊ฐœ๋งŒ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ฆ‰, [c, d, f]๊ฐ€ ์žˆ๋‹ค๋ฉด [d, c, f]๋Š” ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ถœ๋ฐœ์ง€์  s์—์„œ ๋„์ฐฉ์ง€์  a์™€ b๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ๋งŒ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

[๋‚ด ํ’€์ด]

ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ’€๋ฉด ์‰ฝ๊ฒŒ ํ’€๋ฆฐ๋‹ค.

ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ์ฃผ์˜ํ•  ์ ์€ 3์ค‘ ๋ฃจํ”„๋ฌธ์„ ๋Œ ๋•Œ,

๊ฒฝ์œ  ์ง€์  → ์‹œ์ž‘ ์ง€์  → ๋„์ฐฉ ์ง€์  ์ˆœ์œผ๋กœ ํƒ์ƒ‰ํ•ด์•ผ ์ •์ƒ์ ์œผ๋กœ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

#define MAX 99'999'999
using namespace std;

int solution(int n, int start, int a, int b, vector<vector<int>> fares) 
{
    vector<vector<int>> map(n+1, vector<int>(n+1, MAX));
    
    // ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ๊ฐ€๋Š” ์š”๊ธˆ์€ 0
    for(int i = 1; i <= n; ++i)
        map[i][i] = 0;
    
    // ์š”๊ธˆ ์„ค์ •ํ•˜๊ธฐ
    for(const auto& f : fares)
    {
        int n1 = f[0];
        int n2 = f[1];
        int dist = f[2];
        
        map[n1][n2] = dist;
        map[n2][n1] = dist;
    }
  
    // ๋ชจ๋“  ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ๋…ธ๋“œ๊นŒ์ง€ ์ตœ์†Œ ์š”๊ธˆ ๊ตฌํ•˜๊ธฐ(ํ”Œ๋กœ์ด๋“œ ์›Œ์…œ)
    for(int k = 1; k <= n; ++k)
        for(int s = 1; s <= n; ++s)
            for(int d = 1; d <= n; ++d)
                map[s][d] = min(map[s][d], map[s][k] + map[k][d]);
    
    
    // ์ตœ์†Œ ์š”๊ธˆ ์ฐพ๊ธฐ
    int answer = MAX;
    for(int k = 1; k <= n; ++k)
    {
       answer = min(answer, map[start][k] + map[k][a] + map[k][b]); // ์‹œ์ž‘ ์ง€์  ~ ๊ฒฝ์šฐ ์ง€์  + ๊ฒฝ์šฐ ์ง€์  ~ A๋ชฉํ‘œ + ๊ฒฝ์œ  ์ง€์  ~ B๋ชฉํ‘œ
    }
     
     return answer;
}
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿ–ฅ๏ธ Study Note > Coding Test' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ 11657] ๋ฐฑ์ค€ ํƒ€์ž„๋จธ์‹  - C++ ํ’€์ด  (0) 2023.09.06
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.3 - ์ˆœ์œ„ (C++)  (0) 2023.09.05
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.2 - ์ด๋ชจํ‹ฐ์ฝ˜ ํ• ์ธ ํ–‰์‚ฌ(C++)  (1) 2023.08.28
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.2 - ์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉC++)  (0) 2023.08.25
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.3 - ํ‘œํ˜„ ๊ฐ€๋Šฅํ•œ ์ด์ง„ํŠธ๋ฆฌ(C++)  (0) 2023.08.22
'๐Ÿ–ฅ๏ธ Study Note/Coding Test' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [BOJ 11657] ๋ฐฑ์ค€ ํƒ€์ž„๋จธ์‹  - C++ ํ’€์ด
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.3 - ์ˆœ์œ„ (C++)
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.2 - ์ด๋ชจํ‹ฐ์ฝ˜ ํ• ์ธ ํ–‰์‚ฌ(C++)
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.2 - ์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉC++)
Beankong_
Beankong_
์ฃผ๋‹ˆ์–ด ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋ž˜๋จธ ๊ณต๋ถ€ ๊ธฐ๋ก
  • Beankong_
    Beankong's Devlog
    Beankong_
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด ๊ธ€ (141)
      • โ›… Daily (0)
      • ๐Ÿ–ฅ๏ธ Study Note (135)
        • Unreal Engine (5)
        • Coding Test (123)
        • Design Patteren (5)
        • VCS (Git..) (1)
        • Server (1)
      • ๐Ÿงญ Devlog (6)
        • ์˜ค๋‹ต๋…ธํŠธ (2)
        • UE5 GameLift Server Test Project (1)
        • TIL (3)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
Beankong_
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.3 - ํ•ฉ์Šน ํƒ์‹œ ์š”๊ธˆ (C++)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”