[백준/Java] 11725 - 트리의 부모 찾기

2025. 9. 19. 13:35·코딩테스트/백준

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

문제


풀이

루트 노드인 1부터 시작하는 bfs를 만들면 해결되는 문제이다

인접 리스트를 선언하고 입력 노드 양쪽 모두 연결하는 것부터 시작이다

 

예제 1번을 예로 들면 인접 리스트 형태는 아래와 같다 (편의상 오름차순으로 표현)

1 -> 4, 6

2 -> 4

3 -> 5, 6

4 -> 1, 2, 7

5 -> 3

6 -> 1, 3

7 -> 4

 

BFS에서 1번 노드부터 큐에 넣고 시작하여 연결된 모든 노드를 탐색하고 방문 여부를 확인한 후 

방문하지 않았다면 연결된 노드의 부모를 꺼낸 노드로 설정하면 된다

 

자세한건 코드를 확인하자

코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;


public class Main {

	static int N;
	static ArrayList<ArrayList<Integer>> list = new ArrayList<>(); // 인접 리스트 선언
	static int[] parent; // 최종 출력할 부모 배열

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		StringBuilder sb = new StringBuilder();

		// 노드 개수
		N = Integer.parseInt(br.readLine());
		parent = new int[N + 1];

		for (int i = 0; i <= N; i++) {
			list.add(new ArrayList<>());
		}

		for (int i = 0; i < N - 1; i++) {
			st = new StringTokenizer(br.readLine());
			int x = Integer.parseInt(st.nextToken());
			int y = Integer.parseInt(st.nextToken());

			// 입력받은 노드를 양쪽 모두 연결
			list.get(x).add(y);
			list.get(y).add(x);
		}

		// 루트 노드인 1부터 시작
		bfs();

		// 2~N 까지 부모를 출력
		for (int i = 2; i <= N; i++) {
			System.out.println(parent[i]);
		}

		br.close();
	}

	static void bfs() {
		Queue<Integer> queue = new LinkedList<>();
		boolean[] visited = new boolean[N + 1]; // 방문 여부
		visited[1] = true; // 1 방문 처리
		queue.add(1); // 큐에 1 추가

		// 큐가 빌 때까지
		while (!queue.isEmpty()) {
			int cur = queue.poll(); // 큐에서 노드 하나 꺼냄
			// 꺼낸 노드와 연결된 노드를 모두 탐색
			for (int i : list.get(cur)) {
				// 그 노드를 방문하지 않았을 때
				if (!visited[i]) {
					parent[i] = cur; // 꺼낸 노드와 연결된 노드의 부모를 꺼낸 노드로 설정
					visited[i] = true; // 방문 처리
					queue.add(i); // 큐에 노드를 추가
				}
			}
		}
	}
}

결과

'코딩테스트/백준' 카테고리의 다른 글
  • [백준/Java] 15663 - N과 M (9)
  • [백준/Java] 14500 - 테트로미노
  • [백준/Java] 9019 - DSLR
  • [백준/Java] 7662 - 이중 우선순위 큐
KDH.dev
KDH.dev
  • KDH.dev
    CodingHard
    KDH.dev
  • 전체
    오늘
    어제
    • 전체글 (82)
      • 코딩테스트 (74)
        • 프로그래머스 (13)
        • 백준 (61)
      • CS (4)
        • 네트워크 (4)
      • Spring (1)
      • Java (3)
        • 자료구조 (3)
        • 알고리즘 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    5525
    부트캠프후기
    18111
    21736
    11660
    CS
    네트워크
    자바
    14940
    17626
    [LG유플러스] 유레카 백엔드 개발자
    코딩테스트
    30804
    프로그래머스 Lv.0
    자료구조
    백준
    멀티캠퍼스it부트캠프
    16935
    프로그래머스
    13913
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
KDH.dev
[백준/Java] 11725 - 트리의 부모 찾기
상단으로

티스토리툴바