[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.3 - μ–‘κ³Ό λŠ‘λŒ€ (C++)

2023. 9. 14. 15:44Β·πŸ–₯️ Study Note/Coding Test

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
'πŸ–₯️ Study Note/Coding Test' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.3 - 보석 μ‡Όν•‘ (C++)
  • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.3 - λ“±μ‚°μ½”μŠ€ μ •ν•˜κΈ° (C++)
  • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.3 - 미둜 νƒˆμΆœ λͺ…λ Ήμ–΄ (C++)
  • [BOJ 11657] λ°±μ€€ νƒ€μž„λ¨Έμ‹  - 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)
  • λΈ”λ‘œκ·Έ 메뉴

    • 링크

    • 곡지사항

    • 인기 κΈ€

    • νƒœκ·Έ

      programmers
      propertyaccess
      μ•Œκ³ λ¦¬μ¦˜
      μ΅œλ‹¨ 거리 μ•Œκ³ λ¦¬μ¦˜
      κ²Œμž„ 개발
      ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€
      κ·Έλž˜ν”„ 순회
      ν—¬ν…Œμ΄μ»€
      그리디(greedy)
      cpp
      unrealengine module
      UnrealEngine
      UnrealEngine5
      κ²Œμž„ λͺ¨μž‘
      μ½”λ”©ν…ŒμŠ€νŠΈ
      OnlineSubsystem
      κ²Œμž„ ν”„λ‘œκ·Έλž˜λ°
      κ²Œμž„ν”„λ‘œκ·Έλž˜λ°
      ν”„λ£Œκ·Έλž˜λ¨ΈμŠ€
      unrealengine build system
    • 졜근 λŒ“κΈ€

    • 졜근 κΈ€

    • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
    Beankong_
    [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.3 - μ–‘κ³Ό λŠ‘λŒ€ (C++)
    μƒλ‹¨μœΌλ‘œ

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”