์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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
- ์๋ฐ์คํฌ๋ฆฝํธ
- JavaScript
- ์ด๋ฏธ์ง ์์
- ๊ณผ์ ํ ์คํธ
- Node.js
- ๋์ ๊ณํ๋ฒ
- ๋ฆฌ๋์ค ํดํท
- Redux toolkit
- ํ๋ก๊ทธ๋๋จธ์ค
- ์นด์นด์ค์ฑ์ฉ
- TypeScript
- ๋๋๊ทธ ์ด๋ฒคํธ
- DP
- React
- ๋ธ๋ฃจํธํฌ์ค
- ์นด์นด์ค
- ๋ฐฑ์ค
- ์ด๋ถํ์
- custom hook
- ๋ถ์คํธ์ปจํผ๋ฐ์ค
- ์ฝํ
- router v6
- ์๊ณ ๋ฆฌ์ฆ
- js
- ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
- ๋ถ์คํธ์บ ํ์น๋ชจ๋ฐ์ผ
- ์ฝ๋ฉํ ์คํธ
- ์ฝ๋ ํฌ๋ฉง
- Today
- Total
๐ฅ dev-ruby
[ํ๋ก๊ทธ๋๋จธ์ค] ํ ํธ์ง | ์๋ฐ์คํฌ๋ฆฝํธ | 2021 ์นด์นด์ค ์ฑ์ฉ์ฐ๊ณํ ์ธํด์ญ | Lv.3 ๋ณธ๋ฌธ
[ํ๋ก๊ทธ๋๋จธ์ค] ํ ํธ์ง | ์๋ฐ์คํฌ๋ฆฝํธ | 2021 ์นด์นด์ค ์ฑ์ฉ์ฐ๊ณํ ์ธํด์ญ | Lv.3
ruby_s 2022. 5. 4. 09:34๋ฌธ์
https://programmers.co.kr/learn/courses/30/lessons/81303
ํ์ด
function solution(n, k, cmd) {
const stack = [];
const answer = Array.from({ length: n }, () => "O");
const list = Array.from({ length: n }, (_, index) => [index - 1, index + 1]);
list[n - 1][1] = -1;
function upNode(k, row) {
for (let i = 0; i < row; i++) k = list[k][0];
return k;
}
function downNode(k, row) {
for (let i = 0; i < row; i++) k = list[k][1];
return k;
}
function deleteNode(k) {
const [prev, next] = list[k];
stack.push([k, prev, next]);
answer[k] = "X";
if (next === -1) {
if (prev !== -1) list[prev][1] = next;
k = prev;
} else {
list[next][0] = prev;
if (prev !== -1) list[prev][1] = next;
k = next;
}
return k;
}
function restoreNode() {
const [node, prev, next] = stack.pop();
if (prev !== -1) list[prev][1] = node;
if (next !== -1) list[next][0] = node;
answer[node] = "O";
}
for (const item of cmd) {
const [direct, row] = item.split(" ");
switch (direct) {
case "D":
k = downNode(k, +row);
break;
case "U":
k = upNode(k, +row);
break;
case "C":
k = deleteNode(k);
break;
case "Z":
restoreNode();
break;
}
}
return answer.join("");
}
์ด ๋ฌธ์ ๋ ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํด์ผ ํจ์จ์ฑ๊น์ง ํต๊ณผํ๋ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ๋ค..
function upNode(k, row) {
for (let i = 0; i < row; i++) k = list[k][0];
return k;
}
k์ ์์น๋ฅผ ์๋ก ์ฌ๋ฆฌ๋ ํจ์๋ถํฐ ๋ณด์. row์๋ ์ผ๋งํผ ์ฌ๋ ค์ผ ํ๋ ์ง ์ซ์๊ฐ ๋ค์ด์จ๋ค.
์๋ฅผ ๋ค์ด 3๋งํผ ์ฌ๋ฆฌ๋ ค๋ฉด, 3๋ฒ ๋ฐ๋ณตํ๋ฉด์ ํ์ฌ k์์น๊ฐ ๊ฐ๋ฆฌํค๋ prev๋ฅผ k์ ๋์
ํด์ค๋ค. ๊ทธ๋ ๊ฒ 3๋ฒ ๋ฐ๋ณตํ๋ฉด k์ ํ์ฌ ์์น๋ 3๋ฒ์งธ ์์ ์๋ ๋
ธ๋๊ฐ ๋ ๊ฒ์ด๋ค. downNode ํจ์๋ ์ด์ ๊ฐ์ ๋ฐฉ์์ด๋ค.
์ค์ํ ๊ฒ์ deleteNode์ restoreNode ํจ์์ด๋ค.
function deleteNode(k) {
const [prev, next] = list[k];
stack.push([k, prev, next]);
answer[k] = "X";
if (next === -1) {
if (prev !== -1) list[prev][1] = next;
k = prev;
} else {
list[next][0] = prev;
if (prev !== -1) list[prev][1] = next;
k = next;
}
return k;
}
next๊ฐ 1์ธ ๊ฒฝ์ฐ๋ ๋ง์ง๋ง ํ์ ๋ปํ๋ฏ๋ก k๋ฅผ ์ด์ ํ์ผ๋ก ๋ณ๊ฒฝํด์ค๋ค. ๊ทธ๋ฆฌ๊ณ prev๊ฐ -1์ด ์๋ ๊ฒฝ์ฐ (ํ์ด ํ๊ฐ์ธ ๊ฒฝ์ฐ๊ฐ ์๋ ๊ฒฝ์ฐ), ์ด์ ํ์ next๋ -1์ด ๋๋ค.
next๊ฐ 1์ด ์๋ ๊ฒฝ์ฐ๋ ๋ง์ง๋ง ํ์ด ์๋ ๋์ด๋ค. next๊ฐ ๊ฐ๋ฆฌํค๋ prev๋ฅผ ํ์ฌ์ prev๋ก ๋ณ๊ฒฝํด์ฃผ๊ณ , prev์ ๋ค์ ๊ฐ์ด ํ์ฌ์ next๊ฐ ๋๋๋ก ๋ณ๊ฒฝํด์ค๋ค. ๊ทธ๋ฆฌ๊ณ k๋ฅผ ๋ค์ ํ์ผ๋ก ๋๊ธด๋ค.
์ด์ restoreNodeํจ์๋ฅผ ๋ณด์.
function restoreNode() {
const [node, prev, next] = stack.pop();
if (prev !== -1) list[prev][1] = node;
if (next !== -1) list[next][0] = node;
answer[node] = "O";
}
๊ฐ์ฅ ์ต์ ์ ํ์ ์คํ์์ popํ๋ค. if์ผ๋ก ๋ชจ๋ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๊ณ , prev์ ๋ค์ ๊ฐ์ ํ์ฌ ํ์ผ๋ก, next์ ์ด์ ๊ฐ์ ํ์ฌ ํ์ผ๋ก ๋ฐ๊ฟ์ฃผ๊ณ answer์ node์์น๋ฅผ O๋ก ๋ณ๊ฒฝํด์ค๋ค !
์๋ฃ๊ตฌ์กฐ ๋ ๋ฐฐ์ ๋ ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ๋ค์ ํ๋ฒ ๋ณต์ตํ๋ค..๐