Lv3. 길찾기 게임

2025. 1. 24. 18:16·Algorithm & Data Structures/Programers

 

https://school.programmers.co.kr/learn/challenges?order=acceptance_desc&levels=2%2C3%2C4&languages=java&page=7

 

코딩테스트 연습 | 프로그래머스 스쿨

개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!

school.programmers.co.kr

 

 

 

주어진 노드 좌표 정보를 이용해 이진 트리를 구성하고,
전위 순회와 후위 순회를 통해 결과를 반환하는 문제다.

 

먼저 노드 정보를 객체로 변환하고,

y값을 기준으로 내림차순, x값을 기준으로 오름차순으로 정렬한다.

 

이 정렬된 순서대로 첫 번째 노드를 루트로 설정하고 나머지 노드를 트리에 삽입한다.

트리 삽입은 현재 노드와 x값을 비교하여 왼쪽 또는 오른쪽 자식 노드에

배치하는 방식으로 이루어진다.

트리 구성이 끝난 후, 전위 순회와 후위 순회를 수행하며 각각의 결과를 기록한다.
전위 순회는 루트 → 왼쪽 → 오른쪽, 후위 순회는 왼쪽 → 오른쪽 → 루트 순으로 탐색하며,
결과는 2차원 배열에 저장된다.

이를 통해 정렬된 트리에서 전위 순회와 후위 순회 결과를

반환하는 것이 최종 목표다.

 

 

import java.util.*;

class Solution {
    int[][] result;
    int idx;
    
    public int[][] solution(int[][] nodeinfo) {
        int size = nodeinfo.length;
        Node[] nodes = new Node[size];
        for(int i = 0 ; i < size ; i++){
            nodes[i] = new Node(nodeinfo[i][0],nodeinfo[i][1],i+1,null,null);
        }
        Arrays.sort(nodes, (n1, n2) -> (n1.y == n2.y) ? n1.x - n2.x : n2.y - n1.y);
        
        Node root = nodes[0];
        for(int i = 1; i < size ; i++){
            insertNode(root, nodes[i]);
        }
        
        result = new int[2][size];
        
        idx = 0;
        preorder(root);
        idx = 0;
        postorder(root);
        return result;       
    }
    public void insertNode(Node parent, Node child) {
        if(parent.x > child.x) {
            if(parent.left == null) parent.left = child;
            else insertNode(parent.left, child);
        } else {
            if(parent.right == null) parent.right = child;
            else insertNode(parent.right, child);
        }
    }
        public void preorder(Node root) {
        if(root != null) {
            result[0][idx++] = root.value;
            preorder(root.left);
            preorder(root.right);
        }
    }
    
    public void postorder(Node root) {
        if(root != null) {
            postorder(root.left);
            postorder(root.right);
            result[1][idx++] = root.value;
        }
    }
    
    class Node{
        int x;
        int y;
        int value;
        Node left;
        Node right;
        
        public Node(int x, int y, int value, Node left, Node right){
            this.x = x;
            this.y = y;
            this.value = value;
            this.left = left;
            this.right = right;
        }
    }
}

 

'Algorithm & Data Structures > Programers' 카테고리의 다른 글

Lv 2. 조이스틱  (0) 2025.02.05
Lv 2. 숫자블록  (0) 2025.02.03
Lv2. 혼자 놀기의 달인  (0) 2025.01.22
Lv 4. 도둑질  (0) 2025.01.20
Lv 2. 충돌위험 찾기  (0) 2025.01.16
'Algorithm & Data Structures/Programers' 카테고리의 다른 글
  • Lv 2. 조이스틱
  • Lv 2. 숫자블록
  • Lv2. 혼자 놀기의 달인
  • Lv 4. 도둑질
Geisha
Geisha
개발 일기
  • Geisha
    Geisha
    Geisha
  • 전체
    오늘
    어제
    • 분류 전체보기 (304) N
      • Algorithm & Data Structures (230) N
        • BOJ (89) N
        • SWEA (1)
        • Programers (136)
        • Data Structures (3)
      • DB (21) N
        • SQL (15) N
        • RDBMS (2)
      • Java (1)
        • Class (1)
      • Spring (5)
        • Spring MVC (1)
        • Annotations (1)
      • CS (36)
        • 운영체제 (13)
        • 네트워크 (5)
      • Tool (6)
        • Git (5)
        • AWS (1)
      • Project (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    Java
    백트래킹
    후위순회
    Union-Find
    경로압축
    다익스트라
    algorithm
    스택
    dp
    동적계획법
    알고리즘
    baekjoon
    프로그래머스
    유니온파인드
    전위순회
    DynamicProgramming
    binarySearch
    dfs
    unionfind
    PriorityQueue
    Stack
    이분탐색
    구현
    programmers
    투포인터
    백준
    Dijkstra
    이진탐색
    BFS
    위상정렬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Geisha
Lv3. 길찾기 게임
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.