์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ์ด๋ฏธ์ง ์์
- ์ฝํ
- JavaScript
- ์๋ฐ์คํฌ๋ฆฝํธ
- ๋ฐฑ์ค
- svgํ์ผ ๋ค๋ฃจ๊ธฐ
- ์๊ณ ๋ฆฌ์ฆ
- ๋๋๊ทธ ์ด๋ฒคํธ
- ์นด์นด์ค
- Node.js
- ๋ถ์คํธ์บ ํ์น๋ชจ๋ฐ์ผ
- ๋ฆฌ๋์ค ํดํท
- React
- DP
- Redux toolkit
- ์ฝ๋ ํฌ๋ฉง
- icecandidate
- js
- ๋์ ๊ณํ๋ฒ
- ๊ณผ์ ํ ์คํธ
- ์นด์นด์ค์ฑ์ฉ
- ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
- ์ฝ๋ฉํ ์คํธ
- TypeScript
- router v6
- custom hook
- ๋ถ์คํธ์ปจํผ๋ฐ์ค
- ์ด๋ถํ์
- ํ๋ก๊ทธ๋๋จธ์ค
- ๋ธ๋ฃจํธํฌ์ค
- Today
- Total
๐ฅ dev-ruby
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ธธ ์ฐพ๊ธฐ ๊ฒ์ | ์๋ฐ์คํฌ๋ฆฝํธ(js) | Lv.3 | ์ด์งํธ๋ฆฌ | 2019 KAKAO BLIND RECRUITMENT ๋ณธ๋ฌธ
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ธธ ์ฐพ๊ธฐ ๊ฒ์ | ์๋ฐ์คํฌ๋ฆฝํธ(js) | Lv.3 | ์ด์งํธ๋ฆฌ | 2019 KAKAO BLIND RECRUITMENT
ruby_s 2022. 5. 6. 00:01๋ฌธ์
https://programmers.co.kr/learn/courses/30/lessons/42892
ํ์ด
function solution(nodeinfo) {
const sorted = nodeinfo
.map((el, index) => [...el, index + 1])
.sort((a, b) => (a[1] === b[1] ? a[0] - b[0] : b[1] - a[1]));
function order(sorted, preAnswer, postAnswer) {
const [x, y, node] = sorted[0];
const leftChild = [];
const rightChild = [];
for (let i = 1; i < sorted.length; i++) {
const row = sorted[i];
if (row[0] < x) leftChild.push(row);
else rightChild.push(row);
}
preAnswer.push(node);
if (leftChild.length) order(leftChild, preAnswer, postAnswer);
if (rightChild.length) order(rightChild, preAnswer, postAnswer);
postAnswer.push(node);
}
const preAnswer = [];
const postAnswer = [];
order(sorted, preAnswer, postAnswer);
return [preAnswer, postAnswer];
}
์ด ๋ฌธ์ ๋ ๊ฐ ๋
ธ๋๋ง๋ค x์ y์ขํ๊ฐ ์ฃผ์ด์ง๋ค. ์ด์งํธ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ ์์ ๋
ธ๋๋ ์ต๋ 2๊ฐ๋ง ๊ฐ์ง ์ ์๋ค. ์ฒ์์๋ ๋ฌด์์ Y๊ฐ์ด ํ์ฌ ๋
ธ๋๋ณด๋ค ์์ ๊ฒ์ ํ์ํ๊ณ ๊ทธ ์ค X๊ฐ์ด ์์ผ๋ฉด ์ผ์ชฝ์ ๋ฐฐ์น, X๊ฐ์ด ํฌ๋ฉด ์ค๋ฅธ์ชฝ์ ๋ฐฐ์น ํ๋ ค๊ณ ํ์ผ๋..! ๊ทธ๋ ๊ฒ ํ๋ฉด ์๋ ๊ทธ๋ฆผ์์ ์์ธ๊ฐ ๋ฐ์ํ๋ค.
2๋
ธ๋์ ์ผ์ชฝ ์๋์ 1์ด ์กด์ฌํ์ง๋ง, 1์ 2์ ์์๋
ธ๋๋ ์๋๋ค. ๋ฐ๋ผ์ ๋จ์ํ x, y์ขํ๋ก๋ง ํ๋จํด์๋ ์๋๋ค..
const sorted = nodeinfo
.map((el, index) => [...el, index + 1])
.sort((a, b) => (a[1] === b[1] ? a[0] - b[0] : b[1] - a[1]));
๋จผ์ y๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ์ ํด์ค์ผ ํ๋ค. ๊ทธ ์ ์ ํด๋น ๋ ธ๋์ ์ธ๋ฑ์ค๋ฅผ ๊ธฐ์ตํ ํ์๊ฐ ์์ผ๋ฏ๋ก ๋ง์ง๋ง ์์์ index๋ฅผ ์ถ๊ฐํด์ค๋ค. ์ผ์ชฝ๋ถํฐ ํ์ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ y๊ฐ์ด ๊ฐ๋ค๋ฉด x๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํด์ค๋ค.
์ด์ ์ํ ํจ์๋ฅผ ๋ณด์.
function order(sorted, preAnswer, postAnswer) {
const [x, y, node] = sorted[0];
const leftChild = [];
const rightChild = [];
for (let i = 1; i < sorted.length; i++) {
const row = sorted[i];
if (row[0] < x) leftChild.push(row);
else rightChild.push(row);
}
preAnswer.push(node);
if (leftChild.length) order(leftChild, preAnswer, postAnswer);
if (rightChild.length) order(rightChild, preAnswer, postAnswer);
postAnswer.push(node)
}
sorted์ ์์๋
ธ๋๋ฅผ ๊บผ๋ด์ค๋ค. ํด๋น ์์ ๋
ธ๋๋ answer์ ํ๋์ฉ pushํ node์ด๋ค.
์ํ๋ฅผ ์์ํ๊ธฐ ์ ์ answer์ pushํ๋ฉด ์ ์์ํ, ์ํ๊ฐ ๋๋ ํ ๋ค์์๋ถํฐ pushํ๋ฉด ํ์์ํ๊ฐ ๋๋ค.
์ฌ๊ธฐ์ ์ฃผ๋ชฉํด์ผ ํ ๊ฒ์ ๋ฐ๋ณต๋ฌธ์ i๋ 1๋ถํฐ ์์ํ๋ค๋ ๊ฒ์ด๋ค. ์ด๋ฏธ ์ ๋ ฌ์ด ๋ผ์๋ ๋ฐฐ์ด์ด๋ฏ๋ก, ์์๋
ธ๋์ ์๋ ๋
ธ๋๋ค์ ์ญ ํ์ํ๋ค.
์์๋
ธ๋์ x๊ฐ๋ณด๋ค ์๋ค๋ฉด ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ ๋
ธ๋์ด๋ฏ๋ก leftChild์ ๋ฃ์ด์ฃผ๊ณ , ์์๋
ธ๋์ x๊ฐ๋ณด๋ค ํฌ๋ค๋ฉด ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ ๋
ธ๋์ด๋ฏ๋ก rightChild์ ๋ฃ์ด์ค๋ค.
preAnswer์๋ ์์๋
ธ๋๋ฅผ ์์ฐจ์ ์ผ๋ก ์ ์ฅํ๋ฉด ๋๊ณ , ์ผ์ชฝ ์์๊ณผ ์ค๋ฅธ์ชฝ ์์์ด ์์ ๊ฒฝ์ฐ, ๊ฐ๊ฐ ์ผ์ชฝ ์ํ์ ์ค๋ฅธ์ชฝ ์ํ๋ฅผ ๋๊ฒ ๋๋ค. ๋ง์ฝ ์ผ์ชฝ ์์(leftChild)๊ณผ ์ค๋ฅธ์ชฝ ์์(rightChild)์ด ๋ชจ๋ ์๋ค๋ฉด ์ํ๋ ๋๋ฌ๋ค. ์ด์ ๋งจ ํ๋จ์ ๋
ธ๋๋ถํฐ ์ฌ๊ท๋ฅผ ๋๋ด๋ฉด์ postAnswer์ ์ ์ฅ๋ ๊ฒ์ด๋ค.
์ฌ์ค ํธ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ๋ฐฐ์ด๋ก ๊ตฌ์ฑํด์ผ ํ ๊น ์์ฒญ ๋ง์ ๊ณ ๋ฏผ์ ํ๋ค. ๊ทธ๋ด ํ์์์ด ์ ๋ ฌ์ ํ๋ฉด ๋๋๋ฐ ๋์ ์ธ๋ฑ์ค๋ฅผ ๊ธฐ์ตํด์ผ ํ๋ค๋ ์ฌ์ค๊น์ง ์ค์ค๋ก ์์๋ผ ์ ์์ง๋ง..! ์ํ๋ฅผ ๊น๋จน์ด์ ๋ค์ ๊ณต๋ถํ๋ฉด์ ๊ตฌํํ๋ค