๋ฌธ์ ์ค๋ช
์ ๋ฌด๋ก ์น์งํ ๋ผ์ด์ธ์ ๊ธฐ๋ถ์ด ๋๋ฌด ์ข์ ํ๋ ์ฆ๋ฅผ ์ด๋๊ณ ํน๋ณ ํด๊ฐ๋ฅผ ๊ฐ๊ธฐ๋ก ํ๋ค.
๋ด์น๊น์ ์ฌํ ๊ณํ๊น์ง ๊ตฌ์ํ๋ ๋ผ์ด์ธ์ ์ฌ๋ฏธ์๋ ๊ฒ์์ ์๊ฐํด๋๊ณ ์ญ์ ์ ๋ฌด๋ก ์น์งํ ๋งํ ์ธ์ฌ๋ผ๊ณ ์ค์ค๋ก์๊ฒ ๊ฐํํ๋ค.
๋ผ์ด์ธ์ด ๊ตฌ์ํ(๊ทธ๋ฆฌ๊ณ ์๋ง๋ ๋ผ์ด์ธ๋ง ์ฆ๊ฑฐ์ธ๋งํ) ๊ฒ์์, ์นด์นด์ค ํ๋ ์ฆ๋ฅผ ๋ ํ์ผ๋ก ๋๋๊ณ , ๊ฐ ํ์ด ๊ฐ์ ๊ณณ์ ๋ค๋ฅธ ์์๋ก ๋ฐฉ๋ฌธํ๋๋ก ํด์ ๋จผ์ ์ํ๋ฅผ ๋ง์น ํ์ด ์น๋ฆฌํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฅ ์ง๋๋ฅผ ์ฃผ๊ณ ๊ฒ์์ ์์ํ๋ฉด ์ฌ๋ฏธ๊ฐ ๋ํด์ง๋ฏ๋ก, ๋ผ์ด์ธ์ ๋ฐฉ๋ฌธํ ๊ณณ์ 2์ฐจ์ ์ขํ ๊ฐ์ ๊ตฌํ๊ณ ๊ฐ ์ฅ์๋ฅผ ์ด์งํธ๋ฆฌ์ ๋ ธ๋๊ฐ ๋๋๋ก ๊ตฌ์ฑํ ํ, ์ํ ๋ฐฉ๋ฒ์ ํํธ๋ก ์ฃผ์ด ๊ฐ ํ์ด ์ค์ค๋ก ๊ฒฝ๋ก๋ฅผ ์ฐพ๋๋ก ํ ๊ณํ์ด๋ค.
๋ผ์ด์ธ์ ์๋์ ๊ฐ์ ํน๋ณํ ๊ท์น์ผ๋ก ํธ๋ฆฌ ๋ ธ๋๋ค์ ๊ตฌ์ฑํ๋ค.
์๋ ์์๋ฅผ ํ์ธํด๋ณด์.
๋ผ์ด์ธ์ ๊ท์น์ ๋ง๊ฒ ์ด์งํธ๋ฆฌ์ ๋ ธ๋๋ง ์ขํ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค. (์ด์งํธ๋ฆฌ์ ๊ฐ ๋ ธ๋์๋ 1๋ถํฐ N๊น์ง ์์๋๋ก ๋ฒํธ๊ฐ ๋ถ์ด์๋ค.)
์ด์ , ๋ ธ๋๋ฅผ ์๋ ๊ฐ์ (edge)์ ๋ชจ๋ ๊ทธ๋ฆฌ๋ฉด ์๋์ ๊ฐ์ ๋ชจ์์ด ๋๋ค.
์ ์ด์งํธ๋ฆฌ์์ ์ ์ ์ํ(preorder), ํ์ ์ํ(postorder)๋ฅผ ํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๊ณ , ์ด๊ฒ์ ๊ฐ ํ์ด ๋ฐฉ๋ฌธํด์ผ ํ ์์๋ฅผ ์๋ฏธํ๋ค.
๋คํํ ๋ ํ ๋ชจ๋ ๋จธ๋ฆฌ๋ฅผ ๋ชจ์ ๋ถ์ํ ๋์ ๋ผ์ด์ธ์ ์๋๋ฅผ ๊ฐ์ ํ ์์์ฐจ๋ ธ๋ค.
๊ทธ๋ฌ๋ ์ฌ์ ํ ๋ฌธ์ ๋ ๋จ์์๋ค. ๋ ธ๋์ ์๊ฐ ์์์ฒ๋ผ ์ ๋ค๋ฉด ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๊ฒ ์ง๋ง, ์์๋๋ก ๋ผ์ด์ธ์ ๊ทธ๋ ๊ฒ ํ ์๊ฐ์ด ์ ํ ์์๋ค.
์ด์ ๋น์ ์ด ๋์ค ๋๊ฐ ๋์๋ค.
๊ณค๊ฒฝ์ ๋น ์ง ์นด์นด์ค ํ๋ ์ฆ๋ฅผ ์ํด ์ด์งํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ ๋
ธ๋๋ค์ ์ขํ๊ฐ ๋ด๊ธด ๋ฐฐ์ด nodeinfo๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋,
๋
ธ๋๋ค๋ก ๊ตฌ์ฑ๋ ์ด์งํธ๋ฆฌ๋ฅผ ์ ์ ์ํ, ํ์ ์ํํ ๊ฒฐ๊ณผ๋ฅผ 2์ฐจ์ ๋ฐฐ์ด์ ์์๋๋ก ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์.
์ ํ์ฌํญ
1
์ด์ 10,000
์ดํ์ด๋ค.0
์ด์ 100,000
์ดํ์ธ ์ ์์ด๋ค.1,000
์ดํ์ธ ๊ฒฝ์ฐ๋ง ์
๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.์ ์ถ๋ ฅ ์
nodeinfo | result |
---|---|
[[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]] |
์ ์ถ๋ ฅ ์ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
๋ฌธ์ ์ ์ฃผ์ด์ง ์์์ ๊ฐ๋ค.
๋์ ํ์ด
ํด๋น ๋ฌธ์ ์ ์ค์ ํฌ์ธํธ๋ ์ ์ ์ํ, ํ์ ์ํ ๋ฐฉ๋ฒ์ธ๋ฐ
// ์ ์ ์ํ
function preOrder(val) {
if(val !== null) {
pre.push(val.idx)
preOrder(val.left)
preOrder(val.right)
}
}
// ํ์ ์ํ
function postOrder(val) {
if(val !== null) {
postOrder(val.left)
postOrder(val.right)
post.push(val.idx)
}
}
์ ์ฝ๋์์ ์ ์ ์๋ฏ์ด ์ด๋ ํ์ด๋ฐ์ ๋ฐฐ์ด์ ๊ฐ์ ๋ด๋๋ก ๊ตฌ๋ถ ํ ์ ์์
๋ฐ๋ผ์ ์ต์ข ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
function solution(nodeinfo) {
// ์ ์ ๋ฐ ํ์ ๋ฐฐ์ด ์์ฑ
const pre = []
const post = []
// ๋
ธ๋ ํด๋์ค๋ฅผ ์์ฑํจ
class Node {
constructor(idx,x) {
this.idx = idx
this.x = x
this.left = null
this.right = null
}
_add(idx,x) {
if(x <= this.x) {
this._Left(idx,x)
} else {
this._Right(idx,x)
}
}
_Left(idx,x) {
if(this.left) {
this.left._add(idx,x)
} else {
this.left = new Node(idx,x)
}
}
_Right(idx,x) {
if(this.right) {
this.right._add(idx,x)
} else {
this.right = new Node(idx,x)
}
}
}
// y์ถ ๊ธฐ์ค ์ค๋ฆ์ฐจ์์ผ๋ก ๋
ธ๋๋ฅผ ์ ๋ ฌ
const infos = nodeinfo.map((node,idx) => [idx+1, node[0], node[1]]).sort((a,b) => b[2] - a[2])
// y์ถ ์ ๋ ฌ ๊ธฐ์ค ์ฒซ ๋ฒ์งธ ์์๊ฐ ์ต์๋จ ๋ถ๋ชจ ๋
ธ๋
const startNode = new Node(infos[0][0],infos[0][1])
// ๋
ธ๋ ์ฝ์
for(let i = 1; i < infos.length ; i ++) {
startNode._add(infos[i][0],infos[i][1])
}
// ์ ์ ์ํ
function preOrder(val) {
if(val !== null) {
pre.push(val.idx)
preOrder(val.left)
preOrder(val.right)
}
}
// ํ์ ์ํ
function postOrder(val) {
if(val !== null) {
postOrder(val.left)
postOrder(val.right)
post.push(val.idx)
}
}
preOrder(startNode)
postOrder(startNode)
return [pre,post]
}