반응형
문제링크: https://www.acmicpc.net/problem/1068
리프노드의 갯수를 구하는 문제입니다.
dfs 탐색을 통해서 제거된 노드의 자식노드들도 함께 제거를 하면 진행해주었습니다.
만약, 자식 노드를 가지고 있지 않다면 leaf 노드로 간주했습니다.
이때, 주의할 점은 제거된 노드의 부모노드가 leaf 노드가 될 수 있다는 점입니다.
아래는 정답 코드입니다.
#include <iostream>
#include <vector>
using namespace std;
vector <int> vec[50];
int n = 0, root;
void dfs(int n) {
if (vec[n].size() == 0) {
vec[n].push_back(-2);
return;
}
for (int i = 0; i < vec[n].size(); i++) {
dfs(vec[n][i]);
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n;
for (int i = 0; i < n; i++) {
int temp;
cin >> temp;
if (temp == -1)
root = i;
else
vec[temp].push_back(i);
}
int m;
cin >> m;
dfs(m);
for (int i = 0; i < n; i++) {
for (int j = 0; j < vec[i].size(); j++) {
if (vec[i][j] == m)
vec[i].erase(vec[i].begin() + j);
}
}
int result = 0;
for (int i = 0; i < n; i++)
if (vec[i].size() == 0)
result++;
cout << result << endl;
return 0;
}
반응형
'알고리즘 > 기타' 카테고리의 다른 글
[백준] 1655-가운데를 말해요(C++) (0) | 2021.07.16 |
---|---|
[백준] 11000-강의실 배정(C++) (0) | 2021.05.25 |
[백준] 1436-영화감독 숌(C++) (0) | 2020.04.02 |
[백준] 3020-개똥벌레(C++) (0) | 2020.03.21 |
[백준] 14570-나무 위의 구슬(C++) (0) | 2020.03.13 |