이 영역을 누르면 첫 페이지로 이동
Arc 블로그의 첫 페이지로 이동

Arc

페이지 맨 위로 올라가기

Arc

[Baekjoon] 22856: 트리 순회

  • 2023.06.14 13:51
  • Algorithm/PS
글 작성자: SeoArc

문제

유사 중위 순회를 구현하는 문제이다.

 

풀이

내 풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Q22856 {

    private static int n;
    private static int[][] tree;
    private static int visitCount;
    private static int lastNode;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        n = Integer.parseInt(br.readLine());
        tree = new int[(n + 1) * 4][2];
        visitCount = 0;
        for (int i = 0; i < n; i++) {
            String[] input = br.readLine().split(" ");
            int parent = Integer.parseInt(input[0]);
            int left = Integer.parseInt(input[1]);
            int right = Integer.parseInt(input[2]);
            tree[parent][0] = left;
            tree[parent][1] = right;
        }

        inOrder(1);
        search(1);
        System.out.println(visitCount);
    }

    public static void inOrder(int cur) {
        if (tree[cur][0] != -1) {
            inOrder(tree[cur][0]);
        }
        lastNode = cur;
        if (tree[cur][1] != -1) {
            inOrder(tree[cur][1]);
        }
    }

    public static void search(int cur) {
        if (tree[cur][0] != -1) {
            visitCount++;
            search(tree[cur][0]);
            if (tree[cur][0] == lastNode) {
                System.out.println(visitCount);
                System.exit(0);
            }
            visitCount++;
        }
        if (tree[cur][1] != -1) {
            visitCount++;
            search(tree[cur][1]);
            if (tree[cur][1] == lastNode) {
                System.out.println(visitCount);
                System.exit(0);
            }
            visitCount++;
        }
    }
}

여기서 중요한 포인트는 노드의 끝 점을 어떻게 찾느냐이다. 끝 점에 도달하면 회귀하지 않고 바로 끝나야하기 때문이다.

노드의 끝 점은 트리 중위 순회를 통해 찾을 수 있다.

 

위 코드에서는 inOrder 메서드를 통해 값을 계속 저장시킨다. 값을 계속 덮어씌워 저장시키면 마지막 값만 남게된다.

 

회고

내 코드에선 System.exit(0)로 종료를 시켜버렸지만 그렇게 좋은 코드로 보긴 어렵다.

조건을 더 추가하여 return 시켜 마지막에 출력하는 방식으로 수정해봐야겠다.

 

저작자표시 (새창열림)

'Algorithm > PS' 카테고리의 다른 글

[Baekjoon] 15732: 도토리 숨기기  (1) 2023.06.14
[Baekjoon] 16947: 서울 지하철 2호선  (0) 2023.06.14
[Baekjoon] 15898: 피아의 아틀리에 ~신비한 대회의 연금술사~  (1) 2023.05.10
[Baekjoon] 21611: 마법사 상어와 블리자드  (0) 2023.05.10
[Baekjoon] 2176: 합리적인 이동경로  (0) 2023.05.10

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [Baekjoon] 15732: 도토리 숨기기

    [Baekjoon] 15732: 도토리 숨기기

    2023.06.14
  • [Baekjoon] 16947: 서울 지하철 2호선

    [Baekjoon] 16947: 서울 지하철 2호선

    2023.06.14
  • [Baekjoon] 15898: 피아의 아틀리에 ~신비한 대회의 연금술사~

    [Baekjoon] 15898: 피아의 아틀리에 ~신비한 대회의 연금술사~

    2023.05.10
  • [Baekjoon] 21611: 마법사 상어와 블리자드

    [Baekjoon] 21611: 마법사 상어와 블리자드

    2023.05.10
다른 글 더 둘러보기

정보

Arc 블로그의 첫 페이지로 이동

Arc

  • Arc의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (106)
    • Language (28)
      • C++ (0)
      • C# (0)
      • Java (28)
    • Algorithm (47)
      • Algorithm (15)
      • Data Structure (6)
      • PS (26)
    • Computer Science (22)
      • Design Pattern (1)
      • Network (14)
      • OS (7)
    • Game (0)
      • Unity (0)
    • Backend (3)
      • Spring (1)
      • JPA (2)
    • DB (0)
      • SQL (0)
    • DevOps (2)
      • AWS (0)
      • Docker (2)
      • Jenkins (0)
      • Nginx (0)
    • Software Engineering (4)
      • OOP (4)
    • AI (0)
      • Machine Learning (0)
    • Others (0)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • algorithm
  • 알고리즘
  • 네트워크
  • network
  • 자바
  • 그래프
  • java
  • graph

나의 외부 링크

정보

SeoArc의 Arc

Arc

SeoArc

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © SeoArc. Designed by Fraccino.

티스토리툴바