[BOJ] 11725. 트리의 부모 찾기

김휴지 ㅣ 2023. 5. 18. 13:54

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

 

11725번: 트리의 부모 찾기

루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.

www.acmicpc.net


접근 방법

stack을 이용한 DFS 방식으로 풀었다. 나는 DFS를 너무 사랑하는 듯.

각 부모 노드 번호를 저장할 배열과 check 배열을 통합시키기 위해 int 배열을 사용했다.

0이 아닌 수로 방문 처리를 하는 것이다.

 

소스 코드

import java.util.*;
import java.io.*;

public class Main {	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int N = Integer.valueOf(br.readLine());
		ArrayList<Integer>[] g = new ArrayList[N+1];
		int[] check = new int[N+1];
		
		for(int i=0; i<=N; i++) {
			g[i] = new ArrayList<>();
		}
		
		for(int i=0; i<N-1; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine(), " ");
			int n = Integer.valueOf(st.nextToken());
			int m = Integer.valueOf(st.nextToken());
			g[n].add(m);
			g[m].add(n);
		}
		
		Stack<Integer> s = new Stack<>();
		s.push(1);
		check[1] = 1;
		
		while(!s.isEmpty()) {
			int now = s.peek();
			boolean hasNode = false;
			
			for(int i : g[now]) {
				if(check[i] == 0) {
					hasNode = true;
					s.push(i);
					check[i] = now;
					break;
				}
			}
			if(!hasNode)
				s.pop();
		}
		
		for(int i=2; i<=N; i++)
			bw.write(check[i] + "\n");
		bw.close();
	}
}

'코테 > 자바' 카테고리의 다른 글

[SWEA] 1225. 암호생성  (0) 2023.05.21
[SWEA] 4698. 테네스의 특별한 소수  (0) 2023.05.18
[BOJ] 1260. DFS와 BFS  (0) 2023.05.18
[BOJ] 2606. 바이러스  (0) 2023.05.18
[BOJ] 1920. 수 찾기  (0) 2023.05.18