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개의 댓글

Powered by GraphCDN, the GraphQL CDN