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);
}
}
}
'알고리즘 공부' 카테고리의 다른 글
백준 적록색약(복습) (0) | 2023.10.26 |
---|---|
백준 강의실배정(복습) (0) | 2023.10.25 |
프로그래머스 단어변환(복습) (0) | 2023.10.20 |
프로그래머스 네트워크(복습) (0) | 2023.10.20 |
프로그래머스 타겟넘버(복습) (0) | 2023.10.19 |