https://www.acmicpc.net/problem/1068

 

1068번: 트리

첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다

www.acmicpc.net

자바로 다시 풀어봤습니다. 음 조금 시간이 걸리문제 시작 지점이 달라질수 있다는 사실을 문제에서 조금 조건으로 알려줬으면 참 좋겠습니다.

package test01;
import java.io.*;
import java.util.*;

public class Solution {
	public static ArrayList<Integer> lists=new ArrayList<>();
	public static ArrayList<Boolean> bCheck=new ArrayList<>();
	public static int gdel=0;
	public static boolean bFind=false;
	public static int gcnt=0;
	public static void dfs(int k) {
		if(bFind==false) {
			bFind=true;
			gcnt++;
		}
		bCheck.set( k, true );
		for(int i=0;i<lists.size();i++) {
			
			if( lists.get(i) == k && bCheck.get(i)==false) {
				if(gdel != i ) {
					dfs(i);
				}
			}
		}
		
		bFind=false;
		return;
	}
	
	public static void main(String[] args) throws Exception {
	
		Scanner scan=new Scanner(System.in);
		int n=scan.nextInt();
		int start=0;
		for(int i=0;i<n;i++) {
			int tmp=scan.nextInt();
			lists.add(tmp);
			if(tmp==-1) {
				start=i;
			}
			bCheck.add(false);
		}
		int del=scan.nextInt();
		gdel=del;
		
		if(del==start) {
			System.out.println(0);
		}else {
			dfs(start);
			System.out.println(gcnt);
		}
		
	}
}

+ Recent posts