ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ๋„คํŠธ์›Œํฌ(C++)

2023. 4. 10. 12:47ยท๐Ÿ–ฅ๏ธ Study Note/Coding Test

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

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

๋ฌธ์ œ ์„ค๋ช…

๋„คํŠธ์›Œํฌ๋ž€ ์ปดํ“จํ„ฐ ์ƒํ˜ธ ๊ฐ„์— ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฐ๊ฒฐ๋œ ํ˜•ํƒœ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ปดํ“จํ„ฐ A์™€ ์ปดํ“จํ„ฐ B๊ฐ€ ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ , ์ปดํ“จํ„ฐ B์™€ ์ปดํ“จํ„ฐ C๊ฐ€ ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์„ ๋•Œ ์ปดํ“จํ„ฐ A์™€ ์ปดํ“จํ„ฐ C๋„ ๊ฐ„์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ปดํ“จํ„ฐ A, B, C๋Š” ๋ชจ๋‘ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ์ƒ์— ์žˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ œํ•œ์‚ฌํ•ญ

  • ์ปดํ“จํ„ฐ์˜ ๊ฐœ์ˆ˜ n์€ 1 ์ด์ƒ 200 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ๊ฐ ์ปดํ“จํ„ฐ๋Š” 0๋ถ€ํ„ฐ n-1์ธ ์ •์ˆ˜๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • i๋ฒˆ ์ปดํ“จํ„ฐ์™€ j๋ฒˆ ์ปดํ“จํ„ฐ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉด computers[i][j]๋ฅผ 1๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • computer[i][i]๋Š” ํ•ญ์ƒ 1์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

n computers  return
3 [[1, 1, 0], [1, 1, 0], [0, 0, 1]] 2
3 [[1, 1, 0], [1, 1, 1], [0, 1, 1]] 1

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์˜ˆ์ œ #1

์•„๋ž˜์™€ ๊ฐ™์ด 2๊ฐœ์˜ ๋„คํŠธ์›Œํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ #2

์•„๋ž˜์™€ ๊ฐ™์ด 1๊ฐœ์˜ ๋„คํŠธ์›Œํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.


๋‚ด ํ•ด๋‹ต

dfs - stack ์‚ฌ์šฉ

#include <string>
#include <vector>
#include <stack>

using namespace std;

int solution(int n, vector<vector<int>> computers) {
    int answer = 0;
    int cur_computer = 0;
    vector<bool> visit(n, false);
    stack<int>  network{};  // dfs
    
    while(true)
    {
        // ๋„คํŠธ์›Œํฌ์— ์ปดํ“จํ„ฐ ๋ชฉ๋ก์ด ๋น„์—ˆ๋‹ค๋ฉด
        if(network.empty())
        {   
            // ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ปดํ“จํ„ฐ ์ค‘ ์ธ๋ฑ์Šค ๊ฐ’์ด ๊ฐ€์žฅ ์ž‘์€ ์ปดํ“จํ„ฐ 1๊ฐœ๋ฅผ ๋„คํŠธ์›Œํฌ์— ์ถ”๊ฐ€
            for(int i = 0; i < visit.size(); ++i)
            {
                if(!visit[i])
                {
                    network.push(i);
                    break;
                }
            }
            
            // ๋„คํŠธ์›Œํฌ์— ์ปดํ“จํ„ฐ๊ฐ€ ์—†๋‹ค๋ฉด ์ข…๋ฃŒ
            if(network.empty())
                break;
            
            // ๋„คํŠธ์›Œํฌ์— ์ปดํ“จํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋„คํŠธ์›Œํฌ ์ˆ˜ ์ฆ๊ฐ€
            else
                ++answer;
        }
        
         // ํ˜„์žฌ ์ปดํ“จํ„ฐ ๋ฐฉ๋ฌธ
        cur_computer = network.top();
        network.pop();
        visit[cur_computer] = true;
        
        // ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋œ ์ปดํ“จํ„ฐ ๋„ฃ๊ธฐ
        for(int i = 0 ; i < computers[cur_computer].size(); ++i )
        {
            if(1 == computers[cur_computer][i] && !visit[i])
                network.push(i);
        } 
    }
    
    return answer;
}

dfs-stack

dfs - ์žฌ๊ท€์‚ฌ์šฉ

#include <string>
#include <vector>
#include <stack>

using namespace std;

vector<bool> visit(200, false);

void dfs(int cur, const vector<vector<int>>& computers)
{
    visit[cur] = true;
    
    for(int i = 0; i < computers[cur].size(); ++i)
    {
    	// ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์—ฐ๊ฒฐ๋œ ์ปดํ“จํ„ฐ๋ผ๋ฉด ์žฌ๊ท€
        if(1 == computers[cur][i] && !visit[i])
            dfs(i, computers);
    }
    
    return; 
}

int solution(int n, vector<vector<int>> computers) {
    
    int answer = 0;
    
    // ๋„คํŠธ์›Œํฌ๋กœ ์—ฐ๊ฒฐ๋œ ์ปดํ“จํ„ฐ ์ฒดํฌ
    for(int i = 0 ; i < n; ++i )
    {
        if(!visit[i])
        {  
            dfs(i, computers);
            ++answer;
        }
    } 
    
    return answer;
}

dfs-์žฌ๊ท€

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

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

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ๋‹จ์–ด ๋ณ€ํ™˜(C++)  (0) 2023.04.13
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ๊ฒŒ์ž„ ๋งต ์ตœ๋‹จ๊ฑฐ๋ฆฌ(C++)  (0) 2023.04.11
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ํƒ€๊ฒŸ ๋„˜๋ฒ„(C++)  (0) 2023.04.07
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ์ „๋ ฅ๋ง์„ ๋‘˜๋กœ ๋‚˜๋ˆ„๊ธฐ(C++)  (0) 2023.04.06
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ๋ชจ์Œ์‚ฌ์ „(C++)  (0) 2023.04.05
'๐Ÿ–ฅ๏ธ Study Note/Coding Test' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ๋‹จ์–ด ๋ณ€ํ™˜(C++)
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ๊ฒŒ์ž„ ๋งต ์ตœ๋‹จ๊ฑฐ๋ฆฌ(C++)
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ํƒ€๊ฒŸ ๋„˜๋ฒ„(C++)
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ์ „๋ ฅ๋ง์„ ๋‘˜๋กœ ๋‚˜๋ˆ„๊ธฐ(C++)
Beankong_
Beankong_
์ฃผ๋‹ˆ์–ด ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋ž˜๋จธ ๊ณต๋ถ€ ๊ธฐ๋ก
  • Beankong_
    Beankong's Devlog
    Beankong_
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด ๊ธ€ (146)
      • โ›… Daily (0)
      • ๐Ÿ–ฅ๏ธ Study Note (2)
        • C++ (1)
        • Unreal Engine (5)
        • Coding Test (123)
        • Design Patteren (5)
        • VCS (Git..) (1)
        • Server (1)
      • ๐Ÿงญ Devlog (8)
        • ์˜ค๋‹ต๋…ธํŠธ (4)
        • UE5 GameLift Server Test Project (1)
        • TIL (3)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
Beankong_
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ๋„คํŠธ์›Œํฌ(C++)
์ƒ๋‹จ์œผ๋กœ

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