๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 1068๋ฒˆ - ํŠธ๋ฆฌ

by ์•ˆ์ฃผํ˜• 2022. 6. 21.

๋ฌธ์ œ

1068๋ฒˆ: ํŠธ๋ฆฌ

์ฒซ์งธ ์ค„์— ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” 0๋ฒˆ ๋…ธ๋“œ๋ถ€ํ„ฐ N-1๋ฒˆ ๋…ธ๋“œ๊นŒ์ง€, ๊ฐ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋งŒ์•ฝ ๋ถ€๋ชจ๊ฐ€ ์—†๋‹ค๋ฉด (๋ฃจํŠธ) -1์ด ์ฃผ์–ด์ง„๋‹ค

www.acmicpc.net

์ฝ”๋“œ

#include <iostream>
#include <vector>
#include <memory.h>
using namespace std;

vector<int>v[51];
bool visited[51];
int N, root;
int cnt;

void dfs(int start){
    if(v[start].empty()){
        cnt++;
        return;
    }
    else if(v[start].size()==1){
        if(visited[v[start].front()] == true) cnt++;
    }
    
    for(auto it: v[start]){
        if(!visited[it]){
            visited[it] = true;
            dfs(it);
        }
    }
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    cin>>N;
    for(int i=0; i<N; i++){
        int node; cin>>node;
        if(node==-1) root = i;
        else if(node!=-1) v[node].push_back(i);
    }
    memset(visited,0,sizeof(visited));
    int remove; cin>>remove;
    
    visited[remove] = true;
    if(remove!=root) dfs(root);
    cout<<cnt;
}

ํ’€์ด

๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ํŠธ๋ฆฌ์—์„œ ํŠน์ • ๋…ธ๋“œ๋ฅผ ์ง€์šด ํ›„์˜ ๋ฆฌํ”„ ๋…ธ๋“œ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
visited ๋ฐฐ์—ด์„ ๋‘์–ด ์ œ๊ฑฐํ•œ ๋…ธ๋“œ์˜ ๊ฒฝ์šฐ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ œ๊ฑฐํ•˜์˜€๊ณ , ์ตœ์ข…์ ์œผ๋กœ ๊ฐ ๋…ธ๋“œ์˜ size๊ฐ€ 0์ผ ๋•Œ์˜ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์–ด์ฃผ๋ฉด ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
๋‹ค๋งŒ ์•„๋ž˜ ์ž…๋ ฅ๊ณผ ๊ฐ™์ด ํ•œ์ค„ ์งœ๋ฆฌ ๋…ธ๋“œ ๊ฐ€ ์žˆ์„ ๋•Œ ๋…ธ๋“œ๋ฅผ ์ง€์šธ ๋•Œ์˜ ์—ฃ์ง€ ์ผ€์ด์Šค๋ฅผ ์กฐ์‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

4
-1 0 1 2
2

ํ•ด๋‹น ์ผ€์ด์Šค ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ž์‹ ๋…ธ๋“œ๊ฐ€ ํ•˜๋‚˜์ผ ๋•Œ, ๊ทธ ๋…ธ๋“œ๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ๋‹ค๋ฉด ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์นด์šดํŒ… ํ•˜๋Š” ์‹์œผ๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

    else if(v[start].size()==1){
        if(visited[v[start].front()] == true) cnt++;
    }

๋Œ“๊ธ€