https://programmers.co.kr/learn/courses/30/lessons/42892
๋ฌธ์
์ ๋ฌด๋ก ์น์งํ ๋ผ์ด์ธ์ ๊ธฐ๋ถ์ด ๋๋ฌด ์ข์ ํ๋ ์ฆ๋ฅผ ์ด๋๊ณ ํน๋ณ ํด๊ฐ๋ฅผ ๊ฐ๊ธฐ๋ก ํ๋ค.
๋ด์น๊น์ ์ฌํ ๊ณํ๊น์ง ๊ตฌ์ํ๋ ๋ผ์ด์ธ์ ์ฌ๋ฏธ์๋ ๊ฒ์์ ์๊ฐํด๋๊ณ ์ญ์ ์ ๋ฌด๋ก ์น์งํ ๋งํ ์ธ์ฌ๋ผ๊ณ ์ค์ค๋ก์๊ฒ ๊ฐํํ๋ค.
๋ผ์ด์ธ์ด ๊ตฌ์ํ(๊ทธ๋ฆฌ๊ณ ์๋ง๋ ๋ผ์ด์ธ๋ง ์ฆ๊ฑฐ์ธ๋งํ) ๊ฒ์์, ์นด์นด์ค ํ๋ ์ฆ๋ฅผ ๋ ํ์ผ๋ก ๋๋๊ณ , ๊ฐ ํ์ด ๊ฐ์ ๊ณณ์ ๋ค๋ฅธ ์์๋ก ๋ฐฉ๋ฌธํ๋๋ก ํด์ ๋จผ์ ์ํ๋ฅผ ๋ง์น ํ์ด ์น๋ฆฌํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฅ ์ง๋๋ฅผ ์ฃผ๊ณ ๊ฒ์์ ์์ํ๋ฉด ์ฌ๋ฏธ๊ฐ ๋ํด์ง๋ฏ๋ก, ๋ผ์ด์ธ์ ๋ฐฉ๋ฌธํ ๊ณณ์ 2์ฐจ์ ์ขํ ๊ฐ์ ๊ตฌํ๊ณ ๊ฐ ์ฅ์๋ฅผ ์ด์งํธ๋ฆฌ์ ๋ ธ๋๊ฐ ๋๋๋ก ๊ตฌ์ฑํ ํ, ์ํ ๋ฐฉ๋ฒ์ ํํธ๋ก ์ฃผ์ด ๊ฐ ํ์ด ์ค์ค๋ก ๊ฒฝ๋ก๋ฅผ ์ฐพ๋๋ก ํ ๊ณํ์ด๋ค.
๋ผ์ด์ธ์ ์๋์ ๊ฐ์ ํน๋ณํ ๊ท์น์ผ๋ก ํธ๋ฆฌ ๋ ธ๋๋ค์ ๊ตฌ์ฑํ๋ค.
- ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ ๋ชจ๋ ๋ ธ๋์ x, y ์ขํ ๊ฐ์ ์ ์์ด๋ค.
- ๋ชจ๋ ๋ ธ๋๋ ์๋ก ๋ค๋ฅธ x๊ฐ์ ๊ฐ์ง๋ค.
- ๊ฐ์ ๋ ๋ฒจ(level)์ ์๋ ๋ ธ๋๋ ๊ฐ์ y ์ขํ๋ฅผ ๊ฐ์ง๋ค.
- ์์ ๋ ธ๋์ y ๊ฐ์ ํญ์ ๋ถ๋ชจ ๋ ธ๋๋ณด๋ค ์๋ค.
- ์์์ ๋ ธ๋ V์ ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ(left subtree)์ ์๋ ๋ชจ๋ ๋ ธ๋์ x๊ฐ์ V์ x๊ฐ๋ณด๋ค ์๋ค.
- ์์์ ๋ ธ๋ V์ ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ(right subtree)์ ์๋ ๋ชจ๋ ๋ ธ๋์ x๊ฐ์ V์ x๊ฐ๋ณด๋ค ํฌ๋ค.
์๋ ์์๋ฅผ ํ์ธํด๋ณด์.
๋ผ์ด์ธ์ ๊ท์น์ ๋ง๊ฒ ์ด์งํธ๋ฆฌ์ ๋ ธ๋๋ง ์ขํ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค. (์ด์งํธ๋ฆฌ์ ๊ฐ ๋ ธ๋์๋ 1๋ถํฐ N๊น์ง ์์๋๋ก ๋ฒํธ๊ฐ ๋ถ์ด์๋ค.)
์ด์ , ๋ ธ๋๋ฅผ ์๋ ๊ฐ์ (edge)์ ๋ชจ๋ ๊ทธ๋ฆฌ๋ฉด ์๋์ ๊ฐ์ ๋ชจ์์ด ๋๋ค.
์ ์ด์งํธ๋ฆฌ์์ ์ ์ ์ํ(preorder), ํ์ ์ํ(postorder)๋ฅผ ํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๊ณ , ์ด๊ฒ์ ๊ฐ ํ์ด ๋ฐฉ๋ฌธํด์ผ ํ ์์๋ฅผ ์๋ฏธํ๋ค.
- ์ ์ ์ํ : 7, 4, 6, 9, 1, 8, 5, 2, 3
- ํ์ ์ํ : 9, 6, 5, 8, 1, 4, 3, 2, 7
๋คํํ ๋ ํ ๋ชจ๋ ๋จธ๋ฆฌ๋ฅผ ๋ชจ์ ๋ถ์ํ ๋์ ๋ผ์ด์ธ์ ์๋๋ฅผ ๊ฐ์ ํ ์์์ฐจ๋ ธ๋ค.
๊ทธ๋ฌ๋ ์ฌ์ ํ ๋ฌธ์ ๋ ๋จ์์๋ค. ๋
ธ๋์ ์๊ฐ ์์์ฒ๋ผ ์ ๋ค๋ฉด ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๊ฒ ์ง๋ง, ์์๋๋ก ๋ผ์ด์ธ์ ๊ทธ๋ ๊ฒ ํ ์๊ฐ์ด ์ ํ ์์๋ค.
์ด์ ๋น์ ์ด ๋์ค ๋๊ฐ ๋์๋ค.
๊ณค๊ฒฝ์ ๋น ์ง ์นด์นด์ค ํ๋ ์ฆ๋ฅผ ์ํด ์ด์งํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ ๋
ธ๋๋ค์ ์ขํ๊ฐ ๋ด๊ธด ๋ฐฐ์ด nodeinfo๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋,
๋
ธ๋๋ค๋ก ๊ตฌ์ฑ๋ ์ด์งํธ๋ฆฌ๋ฅผ ์ ์ ์ํ, ํ์ ์ํํ ๊ฒฐ๊ณผ๋ฅผ 2์ฐจ์ ๋ฐฐ์ด์ ์์๋๋ก ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์.
์ ํ ์ฌํญ
- nodeinfo๋ ์ด์งํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฐ ๋
ธ๋์ ์ขํ๊ฐ 1๋ฒ ๋
ธ๋๋ถํฐ ์์๋๋ก ๋ค์ด์๋ 2์ฐจ์ ๋ฐฐ์ด์ด๋ค.
- nodeinfo์ ๊ธธ์ด๋ 1 ์ด์ 10,000 ์ดํ์ด๋ค.
- nodeinfo[i] ๋ i + 1๋ฒ ๋ ธ๋์ ์ขํ์ด๋ฉฐ, [x์ถ ์ขํ, y์ถ ์ขํ] ์์ผ๋ก ๋ค์ด์๋ค.
- ๋ชจ๋ ๋ ธ๋์ ์ขํ ๊ฐ์ 0 ์ด์ 100,000 ์ดํ์ธ ์ ์์ด๋ค.
- ํธ๋ฆฌ์ ๊น์ด๊ฐ 1,000 ์ดํ์ธ ๊ฒฝ์ฐ๋ง ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
- ๋ชจ๋ ๋ ธ๋์ ์ขํ๋ ๋ฌธ์ ์ ์ฃผ์ด์ง ๊ท์น์ ๋ฐ๋ฅด๋ฉฐ, ์๋ชป๋ ๋ ธ๋ ์์น๊ฐ ์ฃผ์ด์ง๋ ๊ฒฝ์ฐ๋ ์๋ค.
ํ์ด
Tree ๋ฅผ ๋ง๋ค์ด์ ํด๊ฒฐ!
1๏ธโฃ ๋ ธ๋๋ค์ y์ขํ๊ฐ ํฐ ์์ผ๋ก ์ ๋ ฌ
2๏ธโฃ ๊ฐ์ฅ ํฐ ๋ ธ๋๋ฅผ root๋ก ์ ํ โผ๏ธ
3๏ธโฃ ์ ๋ ฌ๋ ์์ผ๋ก ์์ ๋ ธ๋๋ก ์ถ๊ฐ
๐ ๋ถ๋ชจ๋ณด๋ค x ์ขํ๊ฐ ์์ผ๋ฉด left
๐ ๋ถ๋ชจ๋ณด๋ค x ์ขํ๊ฐ ํฌ๋ฉด right
๐ Tree ์์ฑ ๐
PreOrder , PostOrder ์งํ
์ฝ๋
import java.util.ArrayList;
import java.util.Collections;
public class ๊ธธ์ฐพ๊ธฐ๊ฒ์{
public static class node implements Comparable<node>{
int x;
int y;
int data;
node left;
node right;
node(int x, int y, int data){
this.x = x;
this.y = y;
this.data = data;
}
@Override
public int compareTo(node o) {
return o.y - this.y;
}
}
static ArrayList<node> nodeList;
static int[][] answer;
static int idx;
public static int[][] solution(int[][] nodeinfo) {
answer = new int[2][nodeinfo.length];
nodeList = new ArrayList<>();
for(int i = 0 ; i < nodeinfo.length; i++){
nodeList.add(new node(nodeinfo[i][0], nodeinfo[i][1], i+1));
}
Collections.sort(nodeList);
node root = nodeList.get(0);
for(int i = 1; i < nodeList.size() ; i++){
makeTree(root, nodeList.get(i));
}
idx = 0;
preOrder(root);
idx = 0;
postOrder(root);
return answer;
}
private static void postOrder(node root) {
if(root != null){
postOrder(root.left);
postOrder(root.right);
answer[1][idx++] = root.data;
}
}
private static void preOrder(node root) {
if(root != null){
answer[0][idx++] = root.data;
preOrder(root.left);
preOrder(root.right);
}
}
private static void makeTree(node root, node child) {
if(child.x < root.x){
if(root.left == null)
root.left = child;
else
makeTree(root.left, child);
}
else{
if(root.right == null)
root.right = child;
else
makeTree(root.right, child);
}
}
public static void main(String[] args) {
int[][] nodeinfo = {{5,3},{11,5},{13,3},{3,5},{6,1},{1,3},{8,6},{7,2},{2,2}};
int[][] answer = solution(nodeinfo);
for(int[] ans : answer){
for(int a : ans){
System.out.print(a +" ");
}
System.out.println();
}
}
}