(Java) 백준 11725 - 트리의 부모 찾기

2022. 8. 1. 18:03·코딩 테스트

문제를 풀다 보니 트리에 약점이 있는 것 같아 트리 문제를 풀어보았다.

문제 이해가 좀 어려웠다. 문제에 어떤 트리인지 특정하지 않아서 생각하기 더 어려웠나?

인접 행렬이나 인접 리스트를 만들면 탐색은 금방 할 것 같았는데 인접 리스트를 만드는 게 어려웠다.

트리 문제를 더 풀어봐야겠다.


최종 코드

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

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int n = Integer.parseInt(br.readLine());

        int[] parent = new int[n + 1];
        boolean[] visited = new boolean[n + 1];

        // 인접 리스트 만들기
        List<ArrayList<Integer>> list = new ArrayList<>();
        for (int i = 0; i < n + 1; i++) {
            list.add(new ArrayList());
        }

        // 입력값으로 인접 리스트 삽입
        for (int i = 1; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());

            int left = Integer.parseInt(st.nextToken());
            int right = Integer.parseInt(st.nextToken());

            list.get(left).add(right);
            list.get(right).add(left);
        }

        // BFS
        Queue<Integer> queue = new LinkedList<>();
        queue.add(1);
        visited[1] = true;
        while (!queue.isEmpty()) {
            int temp = queue.poll();
            for (int i : list.get(temp)) {
                if (!visited[i]) {
                    visited[i] = true;
                    queue.add(i);
                    parent[i] = temp;
                }
            }
        }

        // 출력
        for (int i = 0; i < parent.length; i++) {
            if ((parent[i] != 0)) {
                if (i == parent.length - 1) {
                    sb.append(parent[i]);
                } else {
                    sb.append(parent[i]).append("\n");
                }
            }
        }

        System.out.println(sb.toString());

    }
}

'코딩 테스트' 카테고리의 다른 글

(Java) 백준 5639 - 이진 검색 트리  (0) 2022.08.02
(Java) 프로그래머스 - 괄호 회전하기  (0) 2022.08.01
(Java) 백준 9935 - 문자열 폭발  (0) 2022.07.28
(Java) 백준 1991 - 트리 순회  (0) 2022.07.28
(Java) 프로그래머스 - 전력망을 둘로 나누기  (0) 2022.07.27
'코딩 테스트' 카테고리의 다른 글
  • (Java) 백준 5639 - 이진 검색 트리
  • (Java) 프로그래머스 - 괄호 회전하기
  • (Java) 백준 9935 - 문자열 폭발
  • (Java) 백준 1991 - 트리 순회
로승리
로승리
  • 로승리
    Roy's Blog
    로승리
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Issuefy
      • Language
      • Spring
      • Database
      • Network
      • Kubernetes
      • AWS
      • 코드스쿼드
      • 코딩 테스트
      • 생각정리
      • 국비지원
      • 회고
      • 컨퍼런스, 세미나
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
로승리
(Java) 백준 11725 - 트리의 부모 찾기
상단으로

티스토리툴바