728x90

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

๊ธธ ์ฐพ๊ธฐ ๊ฒŒ์ž„

 

๐Ÿ”Ž ๋ฌธ์ œ ํ’€์ด

ํŠธ๋ฆฌ๋ฅผ ์ˆœํšŒํ•˜๋ฉด ๋œ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ์ขŒํ‘œ ๊ฐ’์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๋…ธ๋“œ๋“ค์„ ํŠธ๋ฆฌ๋กœ ๊ตฌ์„ฑํ•ด์•ผํ•œ๋‹ค๋Š” ์ ์ด ํ•ต์‹ฌ์ด๋‹ค.

์ด๋Ÿฐ ์œ ํ˜•์˜ ๋ฌธ์ œ๋Š” ์ฒ˜์Œ์ด๋ผ ,, ํŠธ๋ฆฌ์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•˜๋ฉด์„œ ์ดํ•ดํ–ˆ๋‹ค.

 

ํŠธ๋ฆฌ (Tree)

๐ŸฆŒ ํฌ๋ฆฌ์Šค๋งˆ์Šค D-10 ๊ธฐ๋…์œผ๋กœ ํŠธ๋ฆฌ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž ๐ŸŽ…๐Ÿป ๋ฌผ๋ก  ํฌ๋ฆฌ์Šค๋งˆ์Šค ํŠธ๋ฆฌ ๋ง๊ณ  ,, ์ž๋ฃŒ๊ตฌ์กฐ ํŠธ๋ฆฌ์ด๋‹ค ^_^ ํŠธ๋ฆฌ๋Š” ๊ฐ€๊ณ„๋„์™€ ๊ฐ™์€ ๊ณ„์ธต์ ์ธ ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด

suebin-log.tistory.com

ํŠธ๋ฆฌ๋ฅผ ์ˆœํšŒํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ฝ”๋“œ๋งŒ ์ฒ˜์Œ ๋”ฑ ๋ณด์•˜์„ ๋•Œ๋Š” ์–ด๋ ต๋‹ค๊ณ  ๋А๊ผˆ๋Š”๋ฐ,

ํŠธ๋ฆฌ์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ณ  ๋‹ค์‹œ ๋ณด๋‹ˆ ์ง๊ด€์ ์ด๋ผ์„œ ์˜คํžˆ๋ ค ์ดํ•ดํ•˜๊ธฐ๊ฐ€ ์‰ฌ์› ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์ด ๋ฌธ์ œ์—์„œ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

1) x ์ขŒํ‘œ, y ์ขŒํ‘œ, ๋…ธ๋“œ ๋ฒˆํ˜ธ(=value), ์™ผ์ชฝ ์ž์‹,๋…ธ๋“œ ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก Node ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค.

2) ์กฐ๊ฑด์— ๋งž๋Š” ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด Comparator ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•ด ์ •๋ ฌํ•œ๋‹ค. 

    • y ๊ฐ’์€ ๋” ํฐ ๊ฐ’์ด ๋จผ์ € ์˜ค๋„๋ก, y ๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด x ๊ฐ’์ด ๋” ์ž‘์€ ๊ฐ’์ด ๋จผ์ € ์˜ค๋„๋ก ํ•œ๋‹ค.

3)  ์ •๋ ฌ ํ›„ 0๋ฒˆ ์ธ๋ฑ์Šค ๊ฐ’์„ root๋กœ ์ง€์ •ํ•˜๊ณ , root๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋…ธ๋“œ๋ฅผ insert ํ•œ๋‹ค.

 

ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ค์—ˆ์œผ๋ฉด ์žฌ๊ท€๋ฅผ ํ™œ์šฉํ•ด ์ „์œ„ ์ˆœํšŒ์™€ ํ›„์œ„ ์ˆœํšŒ๋ฅผ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

ํŠนํžˆ, ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด Node ํด๋ž˜์Šค๋ฅผ ๊ฐ์ฒด ๋ฐฐ์—ด๋กœ ์„ ์–ธํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ๊ฐ์ฒด ๋ฐฐ์—ด์— ๋Œ€ํ•ด ์ƒˆ๋กญ๊ฒŒ ๋ฐฐ์› ๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Node ํด๋ž˜์Šค๋ฅผ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒƒ๋„ ์ƒˆ๋กœ์› ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ๋Š” ์ฐธ์กฐ๋ณ€์ˆ˜๋กœ๋งŒ ์“ธ ์ˆ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

 

Kakao Tech ๋ธ”๋กœ๊ทธ ๋ฌธ์ œ ํ•ด์„ค์„ ๋ณด๋‹ˆ ์ด ๋ฌธ์ œ ์ •๋‹ต๋ฅ ์ด 7.4% ์ด๋‹ค ,, 

์›๋ฆฌ๋Š” ์ดํ•ดํ–ˆ์ง€๋งŒ, ๋ง‰์ƒ ๋ฌธ์ œ๋ฅผ ๋งˆ์ฃผ์น˜๋ฉด ๋‹นํ™ฉํ•  ๊ฒƒ ๊ฐ™๋‹ค.

ํŠธ๋ฆฌ ์ˆœํšŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋„ ๋ฐฑ์ค€์—์„œ ๋ช‡ ๊ฐœ ๋” ํ’€์–ด๋ด์•ผ๊ฒ ๋‹ค !

 

ํ•ด๋‹น ๋ฌธ์ œ ํ’€์ด๋Š” ๊ฐ์ฒด ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ !

Kakao Tech์—์„œ๋Š” Queue๋ฅผ ๋งŒ๋“ค์–ด x์ถ• ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ๋œ ๋…ธ๋“œ๋“ค์„ y์ถ• ๊ฐ’์ด ๊ฐ™์€ ๋…ธ๋“œ๋ผ๋ฆฌ ๊ฐ Queue์— ๋„ฃ์–ด๋‘๊ณ , Queue์˜ front๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ค€๋‹ค.

 

Key Point

๐Ÿ”‘ ์ขŒํ‘œ ๊ฐ’์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๋…ธ๋“œ๋“ค์„ ํŠธ๋ฆฌ๋กœ ๊ตฌ์„ฑํ•œ๋‹ค.

๐Ÿ”‘ ํŠธ๋ฆฌ ์ˆœํšŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ™œ์šฉํ•œ๋‹ค.

๐Ÿ”‘ ์ „์œ„ ์ˆœํšŒ๋Š” ๋…ธ๋“œ - ์™ผ์ชฝ ์ž์‹ - ์˜ค๋ฅธ์ชฝ ์ž์‹ ์ˆœ์ด๊ณ , ํ›„์œ„ ์ˆœํšŒ๋Š” ์™ผ์ชฝ ์ž์‹ - ์˜ค๋ฅธ์ชฝ ์ž์‹ - ๋…ธ๋“œ ์ˆœ์ด๋‹ค.

 

Java ์ฝ”๋“œ

import java.util.*;

class Solution {
    
    int[][] answer;
    int idx;
    
    public int[][] solution(int[][] nodeinfo) {
       
        // ๋…ธ๋“œ๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
        
        Node[] node = new Node[nodeinfo.length];
        for (int i=0; i<nodeinfo.length; i++) {
            node[i] = new Node(nodeinfo[i][0], nodeinfo[i][1], i+1, null, null);     
        }
        
        // y๊ฐ’์ด ํฐ ์ˆœ์„œ๋Œ€๋กœ, y๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด x๊ฐ’์ด ์ž‘์€ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•œ๋‹ค.
        
        Arrays.sort(node, new Comparator<Node>() {
            @Override
            public int compare(Node n1, Node n2) {
                if (n1.y == n2.y) return n1.x - n2.x;
                else return n2.y - n1.y;
            }
        });
        
        // ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ ๋‹ค.
        
        Node root = node[0];
        
        for (int i=1; i<node.length; i++) {
            insertNode(root, node[i]);
        }
        
        answer = new int[2][nodeinfo.length];
        idx = 0;
        preorder(root); // ์ „์œ„ ์ˆœํšŒ
        idx = 0;
        postorder(root); // ํ›„์œ„ ์ˆœํšŒ
        
        return answer;
    }
    
    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) {
            answer[0][idx++] = root.value;
            preorder(root.left);
            preorder(root.right);
        }
    }
    
    public void postorder(Node root) {
        if (root != null) {
            postorder(root.left);
            postorder(root.right);
            answer[1][idx++] = root.value;
        }
    }
    
    public 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;
        }
    }
}

 

 


Reference

 

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]๊ธธ ์ฐพ๊ธฐ ๊ฒŒ์ž„ - JAVA

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]๊ธธ ์ฐพ๊ธฐ ๊ฒŒ์ž„ programmers.co.kr/learn/courses/30/lessons/42892 ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๊ธธ ์ฐพ๊ธฐ ๊ฒŒ์ž„ [[5,3],[11,5],[13,3],[3,5],[6,1],[1,3],[8,6],[7,2],[2,2]] [[7,4,6,9,1,8,5,2,3],[9,6,5,8,1,4,3,2,7]] programmers.co.kr ํ’€์ด

moonsbeen.tistory.com

 

728x90

+ Recent posts