https://school.programmers.co.kr/learn/courses/30/lessons/92343
λ¬Έμ μ€λͺ
2μ§ νΈλ¦¬ λͺ¨μ μ΄μμ κ° λ Έλμ λλμ μμ΄ ν λ§λ¦¬μ© λμ¬ μμ΅λλ€. μ΄ μ΄μμ λ£¨νΈ λ Έλμμ μΆλ°νμ¬ κ° λ Έλλ₯Ό λμλ€λλ©° μμ λͺ¨μΌλ € ν©λλ€. κ° λ Έλλ₯Ό λ°©λ¬Έν λ λ§λ€ ν΄λΉ λ Έλμ μλ μκ³Ό λλκ° λΉμ μ λ°λΌμ€κ² λ©λλ€. μ΄λ, λλλ μμ μ‘μλ¨Ήμ κΈ°νλ₯Ό λ Έλ¦¬κ³ μμΌλ©°, λΉμ μ΄ λͺ¨μ μμ μλ³΄λ€ λλμ μκ° κ°κ±°λ λ λ§μμ§λ©΄ λ°λ‘ λͺ¨λ μμ μ‘μλ¨Ήμ΄ λ²λ¦½λλ€. λΉμ μ μ€κ°μ μμ΄ λλμκ² μ‘μλ¨Ήνμ§ μλλ‘ νλ©΄μ μ΅λν λ§μ μμ μμ λͺ¨μμ λ€μ λ£¨νΈ λ Έλλ‘ λμμ€λ € ν©λλ€.
μλ₯Ό λ€μ΄, μ κ·Έλ¦Όμ κ²½μ°(λ£¨νΈ λ Έλμλ νμ μμ΄ μμ΅λλ€) 0λ² λ Έλ(λ£¨νΈ λ Έλ)μμ μΆλ°νλ©΄ μμ νλ§λ¦¬ λͺ¨μ μ μμ΅λλ€. λ€μμΌλ‘ 1λ² λ Έλλ‘ μ΄λνλ©΄ λΉμ μ΄ λͺ¨μ μμ λ λ§λ¦¬κ° λ©λλ€. μ΄λ, λ°λ‘ 4λ² λ Έλλ‘ μ΄λνλ©΄ λλ ν λ§λ¦¬κ° λΉμ μ λ°λΌμ€κ² λ©λλ€. μμ§μ μ 2λ§λ¦¬, λλ 1λ§λ¦¬λ‘ μμ΄ μ‘μλ¨Ήνμ§ μμ§λ§, μ΄νμ κ° μ μλ μμ§ λ°©λ¬Ένμ§ μμ λͺ¨λ λ Έλ(2, 3, 6, 8λ²)μλ λλκ° μμ΅λλ€. μ΄μ΄μ λλκ° μλ λ Έλλ‘ μ΄λνλ€λ©΄(μλ₯Ό λ€μ΄ λ°λ‘ 6λ² λ Έλλ‘ μ΄λνλ€λ©΄) μ 2λ§λ¦¬, λλ 2λ§λ¦¬κ° λμ΄ μμ΄ λͺ¨λ μ‘μλ¨Ήνλλ€. μ¬κΈ°μλ 0λ², 1λ² λ Έλλ₯Ό λ°©λ¬Ένμ¬ μμ 2λ§λ¦¬ λͺ¨μ ν, 8λ² λ Έλλ‘ μ΄λν ν(μ 2λ§λ¦¬ λλ 1λ§λ¦¬) μ΄μ΄μ 7λ², 9λ² λ Έλλ₯Ό λ°©λ¬Ένλ©΄ μ 4λ§λ¦¬ λλ 1λ§λ¦¬κ° λ©λλ€. μ΄μ 4λ², 6λ² λ Έλλ‘ μ΄λνλ©΄ μ 4λ§λ¦¬, λλ 3λ§λ¦¬κ° λλ©°, μ΄μ 5λ² λ Έλλ‘ μ΄λν μ μκ² λ©λλ€. λ°λΌμ μμ μ΅λ 5λ§λ¦¬ λͺ¨μ μ μμ΅λλ€.
κ° λ Έλμ μλ μ λλ λλμ λν μ λ³΄κ° λ΄κΈ΄ λ°°μ΄ info, 2μ§ νΈλ¦¬μ κ° λ Έλλ€μ μ°κ²° κ΄κ³λ₯Ό λ΄μ 2μ°¨μ λ°°μ΄ edgesκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, λ¬Έμ μ μ μλ 쑰건μ λ°λΌ κ° λ Έλλ₯Ό λ°©λ¬Ένλ©΄μ λͺ¨μ μ μλ μμ μ΅λ λͺ λ§λ¦¬μΈμ§ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
λ΄ νμ΄
λ€μ λ Έλλ₯Ό λ°©λ¬Ένμ λ, μκ³Ό λλμ μκ° κ°κ±°λ 컀μ§λ€λ©΄ ν΄λΉ λ Έλλ₯Ό λ°©λ¬Ένμ§ μκ³ λ€μ λ°©λ¬Έν λ Έλλ₯Ό λ°©λ¬Ένλ€. μ΄λ μ€μν μ μ ν΄λΉ λ Έλλ₯Ό λμ€μ λ€μ λ°©λ¬Έν μ μκ² λ€μ λ°©λ¬Έ κ°λ₯ν λ Έλμ μ§ν©μμλ μ κ±°νμ§ μλ κ²μ΄λ€.
#include <string>
#include <vector>
#include <set>
#include <algorithm>
#include <iostream>
using namespace std;
vector<int> Info;
vector<vector<int>> Edges(17);
int Ans = 0;
void dfs(int cur, set<int> nxt, int sheep, int wolf)
{
if(Info[cur] == 0) ++sheep;
else ++wolf;
// λλμκ° μμ μλ³΄λ€ λ§μΌλ©΄ λ°©λ¬Ένμ§ μμ
if(wolf >= sheep)
return;
// λ
Έλμ λ°©λ¬Έ
nxt.erase(cur);
// μ΅λ μμ μκ° μ λ΅
Ans = max(Ans, sheep);
// μ°κ²°λ λ
Έλλ€μ λ€μ λ°©λ¬Έ λ
Έλ μ§ν©μ μΆκ°νλ€.
if(!Edges[cur].empty())
for(auto e : Edges[cur]) nxt.insert(e);
// λ€μμ λ°©λ¬Έν λ
Έλλ€μ νλμ© λ°©λ¬Ένλ€.
for(auto n : nxt) dfs(n, nxt, sheep, wolf);
}
int solution(vector<int> info, vector<vector<int>> edges)
{
int answer = 0;
Info = info;
for(const auto e : edges)
Edges[e[0]].push_back(e[1]);
dfs(0, {0}, 0, 0);
return Ans;
}
'π₯οΈ Study Note > Coding Test' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[νλ‘κ·Έλλ¨Έμ€]level.3 - 보μ μΌν (C++) (0) | 2023.09.20 |
---|---|
[νλ‘κ·Έλλ¨Έμ€]level.3 - λ±μ°μ½μ€ μ νκΈ° (C++) (1) | 2023.09.18 |
[νλ‘κ·Έλλ¨Έμ€]level.3 - λ―Έλ‘ νμΆ λͺ λ Ήμ΄ (C++) (0) | 2023.09.07 |
[BOJ 11657] λ°±μ€ νμλ¨Έμ - C++ νμ΄ (0) | 2023.09.06 |
[νλ‘κ·Έλλ¨Έμ€]level.3 - μμ (C++) (0) | 2023.09.05 |