์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ๋ธ๋ฃจํธํฌ์ค
- ๋ฐฑ์ค
- svgํ์ผ ๋ค๋ฃจ๊ธฐ
- ๋๋๊ทธ ์ด๋ฒคํธ
- ์นด์นด์ค
- icecandidate
- ์นด์นด์ค์ฑ์ฉ
- ์ด๋ฏธ์ง ์์
- ํ๋ก๊ทธ๋๋จธ์ค
- ๊ณผ์ ํ ์คํธ
- custom hook
- Redux toolkit
- ์ฝํ
- ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
- ์๊ณ ๋ฆฌ์ฆ
- ์ฝ๋ฉํ ์คํธ
- ๋ถ์คํธ์ปจํผ๋ฐ์ค
- js
- router v6
- ๋ถ์คํธ์บ ํ์น๋ชจ๋ฐ์ผ
- ๋์ ๊ณํ๋ฒ
- Node.js
- ์ด๋ถํ์
- JavaScript
- React
- DP
- TypeScript
- ์ฝ๋ ํฌ๋ฉง
- ๋ฆฌ๋์ค ํดํท
- ์๋ฐ์คํฌ๋ฆฝํธ
- 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์ ์ ์ฅ๋ ๊ฒ์ด๋ค.
์ฌ์ค ํธ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ๋ฐฐ์ด๋ก ๊ตฌ์ฑํด์ผ ํ ๊น ์์ฒญ ๋ง์ ๊ณ ๋ฏผ์ ํ๋ค. ๊ทธ๋ด ํ์์์ด ์ ๋ ฌ์ ํ๋ฉด ๋๋๋ฐ ๋์ ์ธ๋ฑ์ค๋ฅผ ๊ธฐ์ตํด์ผ ํ๋ค๋ ์ฌ์ค๊น์ง ์ค์ค๋ก ์์๋ผ ์ ์์ง๋ง..! ์ํ๋ฅผ ๊น๋จน์ด์ ๋ค์ ๊ณต๋ถํ๋ฉด์ ๊ตฌํํ๋ค