1068 - 트리

재찬·2023년 1월 29일
0

Algorithm

목록 보기
34/64

문제

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;
}

풀이

  • dfs 재귀 함수 내에서 사용하는 변수를 전역으로 선언했더니 계속 틀렸다.
    재귀 함수에서 쓰는 변수를 전역 변수로 사용하면 오류가 날 수 있다고 한다. 주의해야겠다...

결과

후기

vector를 2차원으로 사용하는것도 아직은 어색하고 로직을 떠올리는 것도 간단해 보이면서 엄청난 시간을 잡아먹었다.
기본기가 많이 부족하다는 것을 느끼게 해준 문제였다.

0개의 댓글