와이유스토리

[DFS 순열, 그래프, 비트] 프로그래머스 양과 늑대 C++ 본문

코딩테스트/그래프|트리

[DFS 순열, 그래프, 비트] 프로그래머스 양과 늑대 C++

유(YOO) 2023. 2. 11. 23:50

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

#include <string>
#include <vector>

using namespace std;

vector<int> v[17];
vector<int> animal(17);
bool visited[17];
int answer;

void dfs(int idx, int lamb, int wolf, int path) {
    if (animal[idx] == 0) lamb++;
    else wolf++;
    
    if (lamb <= wolf) lamb = 0;
    answer = max(answer, lamb);
    
    for(auto vec : v[idx]) path |= (1<<vec); // 갈 수 있는 경로

    for(int i=0; i<animal.size(); i++) {
        if (visited[i]) continue;
        if ((path & (1<<i)) != (1<<i)) continue;
        visited[i] = true;
        dfs(i, lamb, wolf, path);
        visited[i] = false; // DFS 순열
    }
}

int solution(vector<int> info, vector<vector<int>> edges) {
    for(int i=0; i<info.size(); i++) animal[i] = info[i];
    for(auto e : edges) {
        v[e[0]].push_back(e[1]);
        v[e[1]].push_back(e[0]);
    }
    
    visited[0] = true;
    dfs(0, 0, 0, 0);
    
    return answer;
}

경로 표시

Comments