되면한다
프로그래머스 - 양과 늑대 (dfs) 본문
https://school.programmers.co.kr/learn/courses/30/lessons/92343
1. 특징
dfs
2. 구현방법
1) dfs(현재노드, 양, 늑대, 다음에 방문할 수 있는 노드 벡터)
2) dfs 내부에서 현재 노드를 다음에 방문할 수 있는 노드 벡터에서 삭제해주고, 갈 수 있는 다음 노드(자식 노드)를 벡터에 추가해줌 -> dfs 다시 호출
3. 코드
#include <bits/stdc++.h>
using namespace std;
int s;
int w;
int mx;
//dfs
vector<int> adj[20];
void dfs(int curnode, int s, int w, vector<int>& nxtnode, vector<int>& info)
{
if(info[curnode] == 0) s++;
else w++;
if(w >= s) return;
mx = max(mx, s);
for(int i = 0; i < nxtnode.size(); i++)
{
vector<int> tmp = nxtnode;
int x = nxtnode[i];
tmp.erase(tmp.begin()+i);
for(auto nxt: adj[x])
{
tmp.push_back(nxt);
}
dfs(x, s, w, tmp, info);
}
}
int solution(vector<int> info, vector<vector<int>> edges) {
int answer = 0;
for(int i = 0; i < edges.size(); i++)
{
int u = edges[i][0]; int v = edges[i][1];
adj[u].push_back(v);
}
vector<int> nxtnode;
for(auto nxt: adj[0])
{
nxtnode.push_back(nxt);
}
dfs(0, 0, 0, nxtnode, info);
answer = mx;
return answer;
}
4. 참고 블로그
'코딩테스트준비 > 다시볼문제' 카테고리의 다른 글
프로그래머스 풍선 터트리기 (1) | 2023.10.15 |
---|---|
프로그래머스 - 표현 가능한 이진트리 (1) | 2023.09.14 |
1766. 문제집 (0) | 2023.09.07 |
프로그래머스 입국심사 (이분탐색) (0) | 2023.09.04 |
프로그래머스 - 단체사진 찍기 (0) | 2023.08.30 |
Comments