๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/Programmers

[C++/PGS] Lv.3 : ์–‘๊ณผ ๋Š‘๋Œ€ (DFS)

by xxilliant 2025. 4. 15.
728x90
๋ฐ˜์‘ํ˜•

 

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

 

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

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr


ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ ˆ๋ฒจ 3.

๊ฝค๋‚˜ ๊นŒ๋‹ค๋กœ์› ๋˜ ๋ฌธ์ œ ๐Ÿ‘ฟ

ํƒ์ƒ‰ ์‹œ ์กฐ๊ฑด์ด ์žˆ์œผ๋ฏ€๋กœ, dfs ๋ฐฑํŠธ๋ž˜ํ‚น์„ ์ ์šฉํ•œ๋‹ค.

๊ทผ๋ฐ ๋ฐฑํŠธ๋ž˜ํ‚น์€.. ์•ˆํ•ด๋„ ๋œ๋‹ค (๋‹จ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์ด๊ณ , ๋ฐฉ๋ฌธ ์ฒดํฌ๊ฐ€ ์—†์Œ)

 

DFS์— ํ˜„์žฌ ์ธ๋ฑ์Šค, ์–‘์˜ ์ˆ˜, ๋Š‘๋Œ€์˜ ์ˆ˜, ๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ ์œ„์น˜์—์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋‹ค์Œ ๋…ธ๋“œ ๋ชฉ๋ก์„ ์ „๋‹ฌํ•˜๋ฉด

์—ฐ๊ฒฐ๋œ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ 

์กฐ๊ฑด์— ๋งž์ง€ ์•Š์œผ๋ฉด ์žฌ๊ท€๋ฅผ ์ค‘๋‹จํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

bfs๋กœ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋˜๋ฐ, ๊ทธ๊ฑด ์•„๋ž˜์˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ๋  ๋“ฏํ•˜๋‹ค.

๋„ˆ๋น„์šฐ์„  ํƒ์ƒ‰์œผ๋กœ ํ’€ ๋•Œ๋Š” ๋ฐฑํŠธ๋ž˜ํ‚น์ด ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™์•„์„œ ์˜คํžˆ๋ ค ๊นŠ์ด์šฐ์„  ํƒ์ƒ‰ ํ’€์ด๊ฐ€ ๋” ์ง๊ด€์ ์ธ ๋А๋‚Œ์ด๋‹ค..!

์งˆ๋ฌธํ•˜๊ธฐ ๊ฒŒ์‹œํŒ์˜ bfs ํ’€์ด : https://school.programmers.co.kr/questions/81369

 

 

 

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

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

int graph[18][18] = {0,};
vector<vector<int>> edges;
vector<int> info;
map<int, vector<int>> m;
int answer = 0;
int sheepCount = 0;

void dfs(int index, int sheep, int wolf, vector<int> canGo){
    if(sheep <= wolf) return;
    if(sheep == sheepCount) {
        answer = sheep; return;
    }
    if(answer<sheep) answer = sheep;
    
    for(int node: m[index]){ // ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ ํƒ์ƒ‰
        canGo.push_back(node);
    }
    for(int i=0; i<canGo.size(); ++i){
        vector<int> newGo = canGo;
        newGo.erase(newGo.begin()+i);
        // ํ˜„์žฌ ๋…ธ๋“œ๋งŒ ์‚ญ์ œ(์ค‘๋ณต๋ฐฉ์ง€), ๋‹ค๋ฅธ ๋…ธ๋“œ๋Š” ๋ฐฉ๋ฌธ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋‚จ๊ฒจ์•ผ ํ•จ
        if(info[canGo[i]]==0) dfs(canGo[i], sheep+1, wolf, newGo);
        else dfs(canGo[i], sheep, wolf+1, newGo);
    }
}

int solution(vector<int> i, vector<vector<int>> e) {
    // ๋ฐฑํŠธ๋ž˜ํ‚น?
    edges = e;
    info = i;
    for(auto edge : e){
        m[edge[0]].push_back(edge[1]);
    }
    for(int n: i){
        if(n==0) sheepCount++;
    }
    vector<int> canGo; // ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ž์‹๋…ธ๋“œ ๋ชฉ๋ก
    dfs(0,1,0,canGo);
    return answer;
}

 

728x90
๋ฐ˜์‘ํ˜•