๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/Programmers

[C++/PGS] Lv.3 : ์ˆœ์œ„ (๊ทธ๋ž˜ํ”„/Floyd-Warshall)

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

 

๋ฌธ์ œ ์„ค๋ช…

n๋ช…์˜ ๊ถŒํˆฌ์„ ์ˆ˜๊ฐ€ ๊ถŒํˆฌ ๋Œ€ํšŒ์— ์ฐธ์—ฌํ–ˆ๊ณ  ๊ฐ๊ฐ 1๋ฒˆ๋ถ€ํ„ฐ n๋ฒˆ๊นŒ์ง€ ๋ฒˆํ˜ธ๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ๊ถŒํˆฌ ๊ฒฝ๊ธฐ๋Š” 1๋Œ€1 ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰์ด ๋˜๊ณ , ๋งŒ์•ฝ A ์„ ์ˆ˜๊ฐ€ B ์„ ์ˆ˜๋ณด๋‹ค ์‹ค๋ ฅ์ด ์ข‹๋‹ค๋ฉด A ์„ ์ˆ˜๋Š” B ์„ ์ˆ˜๋ฅผ ํ•ญ์ƒ ์ด๊น๋‹ˆ๋‹ค. ์‹ฌํŒ์€ ์ฃผ์–ด์ง„ ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ง€๊ณ  ์„ ์ˆ˜๋“ค์˜ ์ˆœ์œ„๋ฅผ ๋งค๊ธฐ๋ ค ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ช‡๋ช‡ ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ๋ฅผ ๋ถ„์‹คํ•˜์—ฌ ์ •ํ™•ํ•˜๊ฒŒ ์ˆœ์œ„๋ฅผ ๋งค๊ธธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์„ ์ˆ˜์˜ ์ˆ˜ n, ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ๋ฅผ ๋‹ด์€ 2์ฐจ์› ๋ฐฐ์—ด results๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ ์ •ํ™•ํ•˜๊ฒŒ ์ˆœ์œ„๋ฅผ ๋งค๊ธธ ์ˆ˜ ์žˆ๋Š” ์„ ์ˆ˜์˜ ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

 

์ œํ•œ์‚ฌํ•ญ
  • ์„ ์ˆ˜์˜ ์ˆ˜๋Š” 1๋ช… ์ด์ƒ 100๋ช… ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ๋Š” 1๊ฐœ ์ด์ƒ 4,500๊ฐœ ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • results ๋ฐฐ์—ด ๊ฐ ํ–‰ [A, B]๋Š” A ์„ ์ˆ˜๊ฐ€ B ์„ ์ˆ˜๋ฅผ ์ด๊ฒผ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ์—๋Š” ๋ชจ์ˆœ์ด ์—†์Šต๋‹ˆ๋‹ค.

์‚ฝ์งˆ

 

๊ทธ๋ž˜ํ”„๋Š” ๊ทธ๋ƒฅ ๋‹ค bfs๋‚˜ dfs๋กœ ํ’€๋ฉด ๋ ใ…ฃ๋Š”์ค„ ์•Œ์•˜๋˜ ์‚ฌ๋žŒ ๋‚˜์•ผ๋‚˜...๋‚˜์•ผ ๋‚˜....๐Ÿ˜ฉ

๊ทธ๋ƒฅ ์‚ฝ์งˆํ•˜๋‹ค๊ฐ€ ์–ด๋–ป๊ฒŒ ํ‘ธ๋‚˜ ์‹ถ์–ด์„œ ์งˆ๋ฌธ ๊ฒŒ์‹œํŒ ๋“ค์–ด๊ฐ€๋ณด๋‹ˆ

"ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ" ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์จ์„œ ํ’€์–ด์•ผ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

๊ทธ๊ฒŒ๋ญ”๋ฐ์š”..,

 

ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ณ€์˜ ๊ฐ€์ค‘์น˜๊ฐ€ ์Œ์ด๊ฑฐ๋‚˜ ์–‘์ธ ๊ฐ€์ค‘ ๊ทธ๋ž˜ํ”„์—์„œ ์ตœ๋‹จ ๊ฒฝ๋กœ๋“ค์„ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ•œ ๋ฒˆ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ชจ๋“  ๊ผญ์ง“์  ์Œ ๊ฐ„์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ์˜ ๊ธธ์ด๋ฅผ ์ฐพ๋Š”๋‹ค.

 

๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ๋‹จ์ˆœํ•˜๊ฒŒ ๋งํ•˜๋ฉด

a๊ฐ€ b๋กœ ๊ฐ€๊ณ , b๋Š” c๋กœ ๊ฐ„๋‹ค๋ฉด ๊ฒฐ๊ณผ์ ์œผ๋กœ a๋Š” c๋กœ ๊ฐ€๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋ฅผ ์ด์šฉํ•œ ํƒ์ƒ‰๋ฒ•์ด์—ˆ์Œ

 

๊ทธ๋ž˜์„œ ์ผ๋‹จ matrix๋ฅผ ๋งŒ๋“  ํ›„ ์Šน๋ถ€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋“ค์„ ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ์„ ์ ์šฉํ•˜์—ฌ ๋ชจ๋‘ 1๋กœ ๋ฐ”๊พผ๋‹ค.

(a๊ฐ€ b๋ฅผ ์ด๊ธฐ๊ณ , b๊ฐ€ c๋ฅผ ์ด๊ฒผ๋‹ค๋ฉด a๊ฐ€ c๋ฅผ ์ด๊ธธ ๊ฒƒ์ด๋ฏ€๋กœ)

 

์ดํ›„ ์Šน๋ถ€ ํšŸ์ˆ˜๋ฅผ ์„ธ์–ด์„œ, ์ด n-1๋ฒˆ์˜ ์Šน๋ถ€๋ฅผ ํ•œ ์„ ์ˆ˜๋Š” ์ˆœ์œ„๊ฐ€ ํ™•์ •๋˜๋ฏ€๋กœ ์ •๋‹ต ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๋ฉด ์™„์„ฑ...!

 

 

 

๋‚˜์˜ ํ’€์ด

#include <string>
#include <vector>
using namespace std;

bool mat[101][101];

int solution(int n, vector<vector<int>> results) {
    int answer = 0;
    for(int i=0; i<results.size();i++){
        mat[results[i][0]][results[i][1]] = true;
    } // ๋งคํŠธ๋ฆญ์Šค ๊ทธ๋ž˜ํ”„ ๋งŒ๋“ค๊ธฐ

    for(int k=1; k<=n;k++){
        for(int i=1; i<=n;i++){
            for(int j=1; j<=n; j++){
                if(mat[i][k] && mat[k][j]){ // i๊ฐ€ k๋ฅผ ์ด๊ธฐ๊ณ , k๋Š” j๋ฅผ ์ด๊ฒผ์„ ๋•Œ
                    mat[i][j] =true; // i๋Š” j๋ฅผ ์ด๊ธธ ๊ฒƒ์ž„
                }
            }
        }
    }
    for(int i=1; i<=n;i++){
        int count =0;
        for(int j=1; j<=n;j++){
            if(mat[i][j] || mat[j][i]){ // ์Šน๋ถ€ ํšŸ์ˆ˜ ์นด์šดํŠธ
                count++;
            }
        }
        if(count == n-1) answer++; // ์Šน๋ถ€๊ฐ€ n-1์ผ๋•Œ ์ˆœ์œ„ ํ™•์ •
    }
    return answer;
}