1068번: 트리
문제가 길어서 링크로 대체했습니다.
#include<bits/stdc++.h>
using namespace std;
int n, p, e, root;
vector<int> v[54];
int dfs(int y){
int ret = 0;
int child = 0;
for(int a : v[y]){
if(a == e) continue;
ret += dfs(a);
child++;
}
if(child == 0) return 1;
return ret;
}
int main(){
cin >> n;
for(int i = 0; i <n; i++){
cin >> p;
if(p == -1) root = i;
else v[p].push_back(i);
}
cin >> e;
if(e == root){
cout << 0 << '\n';
return 0;
}
cout << dfs(root) << '\n';
return 0;
}
vector를 2차원으로 사용하는것도 아직은 어색하고 로직을 떠올리는 것도 간단해 보이면서 엄청난 시간을 잡아먹었다.
기본기가 많이 부족하다는 것을 느끼게 해준 문제였다.