https://www.acmicpc.net/problem/11725
- 풀이
- 노드의 연결 관계를 ArrayList에 입력한다.
- 인접 노드를 탐색해서 방문하지 않은 경우(자식) 기준 노드를 부모 노드로 저장하는 함수를 작성한다.
- 이를 루트 노드부터 시작해서 반복한다.
- 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Main {
static int N; // 노드 개수
static ArrayList<Integer> tree[];
static boolean [] isVisited; // 방문 여부
static int[] parent; // 부모 노드 저장
static void findParent(int node) {
for (int nextNode : tree[node]) {
if (isVisited[nextNode]==false) { // 방문하지 않은 경우 자식 노드
isVisited[nextNode] = true; // 자식 노드 방문 체크
parent[nextNode] = node; // 자식 노드의 부모 노드 저장
findParent(child); // 자식 노드 탐색
}
}
}
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bf.readLine());
N = Integer.parseInt(st.nextToken());
tree = new ArrayList[N+1]; // 루트 노드가 1이라 +1
isVisited = new boolean [N+1];
parent = new int[N+1];
for(int i=0; i<tree.length; i++) {
tree[i] = new ArrayList<>(); // 각각 초기화
}
for(int i=0; i<N-1;i++) {
// 연결 관계 입력
st = new StringTokenizer(bf.readLine());
int u = Integer.parseInt(st.nextToken());
int v = Integer.parseInt(st.nextToken());
tree[u].add(v);
tree[v].add(u);
}
// 전체 노드 출력
// for (int i=1; i<N+1;i++) System.out.println(i + " 노드 : " + tree[i]);
// RootNode부터 탐색
findParent(1);
// 부모 노드 출력
for (int i=2;i<N+1;i++) System.out.println(parent[i]);
}
}
'개발 > 코딩테스트' 카테고리의 다른 글
백준 11047번: 동전 0 [JAVA] (1) | 2023.03.16 |
---|---|
백준 1182번: 부분수열의 합 [JAVA] (0) | 2023.03.15 |
백준 1068번: 트리 [JAVA] (0) | 2023.03.15 |
9742번: 순열 (0) | 2023.03.15 |
EOF 처리 (0) | 2023.03.15 |
댓글