์ค๋๋ ํ ์ ์๋ ๊ฒ๋ค์ ์์๋๋ก ๋จผ์ ๋์ดํด๋ดค๋ค.
function solution(numbers, hand) {
const click = [];
const keypad = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
['*', 0, '#']
]
const findKey = (n) => {
let result = [];
keypad.forEach((line, i) => {
if (line.findIndex(v => v === n) !== -1) {
result = [i, line.findIndex(v => v === n)];
return;
}
})
return result;
}
let [leftNow, rightNow] = [[3, 0], [3, 2]];
numbers.forEach(n => {
const left = [1, 4, 7];
const right = [3, 6, 9];
const leftFn = () => {
click.push("L");
leftNow = nPosition;
}
const rightFn = () => {
click.push("R");
rightNow = nPosition;
}
let nPosition = findKey(n);
if (left.includes(n)) {
leftFn();
}
else if (right.includes(n)) {
rightFn();
}
else {
let distance = (nowPosition) => Math.abs(nPosition[0] - nowPosition[0]) + Math.abs(nPosition[1] - nowPosition[1])
const leftD = distance(leftNow);
const rightD = distance(rightNow);
if (leftD === rightD) {
hand === "left" ? leftFn() : rightFn();
} else {
leftD < rightD ? leftFn() : rightFn();
}
}
});
return click.join("")
}
left, right ๋ฐฐ์ด์์ findIndex ํ๋ ๋ถ๋ถ์ ์ ๊ท์์ผ๋ก ๋ฐ๊ฟ ์ ์๋ค.
if (/[147]/.test(x)) {
leftFn();
}
if (/[369]/.test(x)) {
rightFn();
}
์ฒ์์ test ํจ์๊ฐ ์์ฑํ ์ฌ๋์ด ๋ง๋ ์์์ ํจ์์ธ ์ค ์์๋๋ฐ,
์๊ณ ๋ณด๋ ์ ๊ท์ ๊ณ ์ฐจํจ์์๋ค...!!
์!
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test
test() ๋ฉ์๋๋ ์ฃผ์ด์ง ๋ฌธ์์ด์ด ์ ๊ท ํํ์์ ๋ง์กฑํ๋์ง ํ๋ณํ๊ณ , ๊ทธ ์ฌ๋ถ๋ฅผ true ๋๋ false๋ก ๋ฐํํฉ๋๋ค.
๋ง์กฑํ๋ค๋ ๊ฑด -> ์ ๊ท ํํ์์ด ์ผ์นํ๋ ๋ถ๋ถ์ด ์๋๊ฐ๋ฅผ ์๋ฏธํ๋ค.
์ด๋ ๊ฒ ์ข์ ํจ์๋ฅผ ์ด์ ์์๋ค๋
์ญ์ mdn ์ ๊ผผ๊ผผํ ๋ณผ ์๋ก ์ด๋์ด๋น
๋๊ตฌ๋๊ตฌ ๊ทธ๋ฆฌ๊ณ ์ค๋๋ง์ ๋น๋๋์ด ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํด์ฃผ์ จ๋ค.
์์ธ์ง ๊ฐ ์๋ก ๊ผผ๊ผผํ๊ฒ ํด์ฃผ์๋๊ฑฐ ๊ฐ์์ ๋๋ฌด ๊ฐ์ฌํ๋ผ....
๊ณ ์ค๋ํ ํก์ํ๋ฉด ์ผ๋ง๋ ์ข์๊น!
์๋
ํ์ธ์ ๋์๋ ํด๋น ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ์์ํ๊ฒ ์ต๋๋ค.
๋จผ์ ๊ธฐ๋ฅ์ ๋ํ ์ฝ๋๋ฅผ ๋ถ์ํ๊ธฐ ์ ์ ์ฝ๋ ์คํ์ผ๋ถํฐ ์ ๊ฒํ๊ฒ ์ต๋๋ค.
๋ง์นจํ ์ข
๊ฒฐํ ์ธ๋ฏธํด๋ก ์ ์๋ต ์ฌ๋ถ๋ฅผ ์ผ๊ด๋๊ฒ ํด์ผํฉ๋๋ค.
์ ์ถํ ์ฝ๋๋ distance ํจ์๋ง ์ธ๋ฏธํด๋ก ์ ์๋ตํ๊ณ ๋๋จธ์ง ์ฝ๋๋ ์ธ๋ฏธํด๋ก ์ ๋ถ์์ต๋๋ค. ๋ฌผ๋ก ์ค๊ฐ์ ์๋ต์ ํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์์ ์๋์ผ๋ก ์ธ๋ฏธํด๋ก ์ ๋ถ์ฌ์ฃผ๋ ์์
์ ์ํํ๊ฒ ๋ฉ๋๋ค. ํ์ง๋ง ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ํต์ผ์ ํด์ผ ์ฝ๋์ ๊ฐ๋
์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
์... ์ธ๋ฏธ์ฝ๋ก ์ ๋๋ก ๋ถ์ด๋์ง๋ ๋ณด์๋ค๋ ๋น๋๋์ ์ญ์ GPT ์๋๊น...?
ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ
์ด๊ฑด ๊ฑ ์๊ฒจ์ ๊ฐ์ ธ์ด
๋๋ ์น์ .....
๊ทธ๋ฆฌ๊ณ ์ด์ ์ฝ๋์ ๋ํ ๊ธฐ๋ฅ ๋ถ๋ถ์ ์ ๊ฒํ๊ฒ ์ต๋๋ค.
๋จผ์ ๊ธฐ์กด์ findKey ํจ์๋ forEach๋ฅผ ์ฌ์ฉํ์ฌ ํคํจ๋์ ๊ฐ ํ์ ์ํํ๋ฉด์,
์ซ์ n์ด ์๋ ํ์ ์ฐพ์์ต๋๋ค. ์ด ๋ findIndex ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํ ๋ด์์ n์ ์์น๋ฅผ ์ฐพ์๊ณ , n์ด ์์ผ๋ฉด n์ ์์น๋ฅผ ๊ฒฐ๊ณผ์ ์ ์ฅํ์ต๋๋ค.
๊ทธ๋ฌ๋ findIndex๋ฅผ ๋๋ฒ ํธ์ถํ๋ฏ๋ก ๋นํจ์จ์ ์ผ ์ ์์ต๋๋ค.
๊ทธ๋์ ๋ค์๊ณผ ๊ฐ์ด findIndex๋ฅผ ํ๋ฒ๋ง ํธ์ถํ๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค.
const findPosition = n => keypad.reduce((acc, row, i) => row.includes(n) ? [i, row.indexOf(n)] : acc, []);
๋ฆฌํฉํ ๋ง๋ findPosition ํจ์์์๋ reduce ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ์์
์ ์ํํฉ๋๋ค.
reduce ๋ฉ์๋๋ ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ์ฃผ์ด์ง ์ฝ๋ฐฑ ํจ์๋ฅผ ์คํํ๋ฉด์, ๋์ ๊ฐ์ ๊ฒฐ๊ณผ๋ก ๋ฐํํฉ๋๋ค.
์ด ๋ ์ฝ๋ฐฑ ํจ์๋ ํ์ฌ ์์๊ฐ n์ ํฌํจํ๊ณ ์๋์ง ํ์ธํ๊ณ , n์ด ์์ผ๋ฉด n์ ์์น๋ฅผ ๋ฐํํ๊ฑฐ๋,
๊ทธ๋ ์ง ์์ผ๋ฉด ๋์ ๊ฐ์ ๊ทธ๋๋ก ๋ฐํํฉ๋๋ค.
์ด๋ฌํ ๋ฐฉ์์ findIndex๋ฅผ ๋๋ฒ ํธ์ถํ๋ ๊ฒ์ ํผํ๊ณ includes์ indexOf๋ฅผ ๊ฐ๊ฐ ํ๋ฒ ์ฉ ์ฌ์ฉํ์ฌ
ํธ์จ์ฑ์ ๋์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ธฐ์กด์ ํจ์์ ์ด๋ฆ key๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ ์ ์์ผ๋ฉฐ ๋ถ๋ถ๋ช
ํฉ๋๋ค.
ํจ์๊ฐ ํ๋์ผ์ ์ฝ๊ฒ ์ดํดํ ์ ์๋ ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ์ผํฉ๋๋ค.
์์น๋ฅผ ์ฐพ๋ ํจ์์ด๊ธฐ ๋๋ฌธ์ ๋ฆฌํฉํ ๋ง ๋ ํจ์์ ์ด๋ฆ์ด ์ ์ ํฉ๋๋ค.
ํ ์ด๊ฒ ๋ฌด์จ ๋ง์ผ๊น
์ดํดํ๊ณ ์๋ชป ์ดํดํ ์ค ๋ฐํท
์ด ํจ์๋ keypad์ ๊ฐ ์์ (์ฆ, ๊ฐ ํ)์ ๋ํด ์ฝ๋ฐฑ ํจ์๋ฅผ ์คํํฉ๋๋ค.
์ฝ๋ฐฑ ํจ์๋ ๋ ๊ฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ์ต๋๋ค. ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ ๋์ ๊ฐ (acc)์ด๋ฉฐ,
์ด๊ธฐ๊ฐ์ ๋น ๋ฐฐ์ด []์
๋๋ค. ๋ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ ํ์ฌ ์์ (์ฆ, ํ์ฌ ํ)์
๋๋ค.
์ฝ๋ฐฑ ํจ์๋ ํ์ฌ ํ์ด n์ ํฌํจํ๋์ง ํ์ธํฉ๋๋ค.
๋ง์ฝ n์ ํฌํจํ๋ฉด, ์ฝ๋ฐฑ ํจ์๋ n์ ์์น ([i, row.indexOf(n)])๋ฅผ ๋ฐํํฉ๋๋ค.
์ด ์์น๋ ๋ค์ ๋ฐ๋ณต์์์ ๋์ ๊ฐ์ด ๋ฉ๋๋ค.
๋ง์ฝ ํ์ฌ ํ์ด n์ ํฌํจํ์ง ์์ผ๋ฉด, ์ฝ๋ฐฑ ํจ์๋ ๋์ ๊ฐ์ ๊ทธ๋๋ก ๋ฐํํฉ๋๋ค.
์ฆ, ๋์ ๊ฐ์ ์ด์ ํ์์ ์ฐพ์ n์ ์์น๋ฅผ ์ ์งํ๊ฑฐ๋,
์์ง n์ ์ฐพ์ง ๋ชปํ๋ค๋ฉด ๋น ๋ฐฐ์ด []์ ์ ์งํฉ๋๋ค.
๋ฐ๋ผ์ reduce ํจ์๋ keypad์ ๋ชจ๋ ํ์ ์ํํ๋ฉด์ n์ ์์น๋ฅผ ์ฐพ์ต๋๋ค.
๋ง์ฝ n์ ์ฐพ์ผ๋ฉด ๊ทธ ์์น๋ฅผ ๋ฐํํ๊ณ , n์ ์ฐพ์ง ๋ชปํ๋ฉด ๋น ๋ฐฐ์ด []์ ๋ฐํํฉ๋๋ค.
๋ง์ด ๋ธ๋ ์ธ ๋ง์ถคํ ์ค๋ช ..... ๊ฐ์ฌํ๋ค....
์ค๋ณต์ฝ๋์ ๊ฑฐํ๊ธฐ
leftFn ๊ณผ rightFn
๊ธฐ์กด์ ์ฝ๋๋ leftFn๊ณผ rightFn์ ๋ฐ๋ก ์ ์ํ์์ต๋๋ค.
ํด๋น ํจ์์ ๋ด์ฉ์ ์
๋ ฅ๊ฐ๋ง ๋ค๋ฅผ๋ฟ ํ๋์ผ์ด ๊ฐ์ ํจ์์
๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก ํด๋น ํจ์๋ ์ค๋ณต์ ์ค์ฌ์ผํฉ๋๋ค.
distance ํจ์
๊ธฐ์กด์ ์ฝ๋๋ forEach ์์์ ์กฐ๊ฑด๋ฌธ๋ฅผ ํตํด ๊ฑฐ๋ฆฌ ํจ์๋ฅผ ์ ์ ํ์์ต๋๋ค.
๊ธฐ์กด์ ์ฝ๋ if ์ else if๋ "L" ๋๋ "R"๋ฅผ ์ด์ฉํ๊ณ ์์น๋ฅผ ๋์
ํฉ๋๋ค.
ํ์ง๋ง distance ํจ์๊ฐ ์ ์๋ else ๋ฌธ์ ๋ณด๋ฉด if ์ else...if์ ๋ค๋ฅด๊ฒ
์ถ๊ฐ์ ์ธ ๊ฑฐ๋ฆฌ ํจ์๋ฅผ ์ ์ํ๋ฉฐ ์คํํ๊ณ ์์ต๋๋ค.
์กฐ๊ฑด๋ฌธ์์ else๋ฌธ๋ง ํจ์๋ฅผ ์ ์๋ฅผ ํ๊ณ ์๊ธฐ๋๋ฌธ์
์ด์ ์ ์ฌ๋ฆฐ ๋ฆฌํฉํ ๋ง๋ ํจ์ (findPostion)์ ๊ฐ์ ์ค์ฝํ์ ์์นํ๋ ๊ฒ์ด ์ ์ ํฉ๋๋ค.
const findPosition = n => keypad.reduce((acc, row, i) => row.includes(n) ? [i, row.indexOf(n)] : acc, []);
const distance = (p1, p2) => Math.abs(p1[0] - p2[0]) + Math.abs(p1[1] - p2[1]);
์ฆ ์กฐ๊ฑด๋ฌธ์์ ํจ์๋ฅผ ์ ์ํ์ง ๋ง๊ณ forEach ๋ฌธ ๋ฐ์์ ์ ์ํ์๋ฉด ๋ฉ๋๋ค.
์คํธ...
๊ทธ๋ฌ๋๊น else if ๋ฌธ ์์์ ํจ์๋ฅผ ์ ์ ํ๋๋ฐ, ...
์ด ๋ถ๋ถ ์์ฑํ ๋ else ๋ฌธ์์๋ง ์ฐ๋๊น else ๋ฌธ ์์ ๋ฃ์ด์ผ์ง~ ํ๊ณ ์ด๊ฑด๋ฐ
์กฐ๊ฑด๋ฌธ ์ ์ฒด์ ํ๋ฆ..? ๋๋ฌธ์ ์กฐ๊ฑด๋ฌธ ๋ฐ์์ ์ฐ๋ ๊ฒ ์ ์ ํ๋ค๊ณ ์ดํดํ๋ฉด ๋๋๊ฑธ๊น??
์ต์ข
์์ ๋ ๋ฆฌํฉํ ๋ง ์ฝ๋
const solution = (numbers, hand) => {
const keypad = [[1, 2, 3], [4, 5, 6], [7, 8, 9], ['*', 0, '#']];
let [left, right] = [[3, 0], [3, 2]];
const findPosition = n => keypad.reduce((acc, row, i) => row.includes(n) ? [i, row.indexOf(n)] : acc, []);
const distance = (p1, p2) => Math.abs(p1[0] - p2[0]) + Math.abs(p1[1] - p2[1]);
return numbers.map(n => {
const pos = findPosition(n);
const [leftKeys, rightKeys] = [[1, 4, 7], [3, 6, 9]];
if (leftKeys.includes(n)) {
left = pos;
return 'L';
} else if (rightKeys.includes(n)) {
right = pos;
return 'R';
} else {
const [leftDist, rightDist] = [distance(left, pos), distance(right, pos)];
const result = leftDist < rightDist || (leftDist === rightDist && hand === 'left') ? 'L' : 'R';
result === 'L' ? left = pos : right = pos;
return result;
}
}).join('');
}
๊ตฌ์กฐ ๋ถํด ํ ๋น ๋ฌธ๋ฒ ์ฌ์ฉํ๊ธฐ
const left = [1, 4, 7];
const right = [3, 6, 9];
์์ ์ฝ๋๋ ๊ธฐ์กด์ ์ฝ๋์
๋๋ค. left right๋ณ์๋ ์๋ก ์ฐ๊ด์ด ์๋ ๋ฐฐ์ด์
๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ๋ฐ๊ฟ์ ์์ต๋๋ค.
const [leftKeys, rightKeys] = [[1, 4, 7], [3, 6, 9]];
3.
๊ธฐ์กด์ ์ฝ๋๋ ์กฐ๊ฑด๋ฌธ์ ํตํด "L"๊ณผ "R"์ click ๋ฐฐ์ด์ ์ ์ฅํ๊ณ ํ์ฌ ์์น๋ฅผ ๊ฐฑ์ ํ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ ์ผ์ ํ๋ค๋ ๊ฒ์ ์๋ฆฌ๊ธฐ ์ํด leftFn, rightFn ํจ์๋ฅผ ์ ์ํ๋๊ฒ์
์ค๋ณต์ ์ค์ผ ์ ์์ด์ ์ข์ ์ ๊ทผ์
๋๋ค.
const leftFn = () => {
click.push("L");
leftNow = nPosition;
}
const rightFn = () => {
click.push("R");
rightNow = nPosition;
}
๋ค๋ง ํด๋น ํจ์๋ค์ ์๋ก ๊ฐ์ ์ผ์ ํ๊ณ ๊ทธ๋ฆฌ๊ณ ํจ์์ ์ผ์ด ๋งค์ฐ ์งง์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋น ํจ์๋ฅผ ์ค๋ณต์ ๋ฌถ์ ๋งํผ ์กฐ๊ฑด๋ฌธ์์ ๋๊ฐ์ง ์ผ์ ํ์ง ์์ต๋๋ค.
๊ทธ๋์ ํจ์๋ฅผ ๋ง๋ค์ง ์๊ณ ์กฐ๊ฑด๋ฌธ์ ๋ณด๋ค ๊ฐ๊ฒฐํ๊ฒ ์งค์ ์์ต๋๋ค.
ํนํ else ๋ฌธ์ ๋ณด์๋ฉด ๋ ํจ์์ ๋ด์ฉ์ ์กฐ๊ฑด๋ฌธ ๋ด๋ถ๋ก ์ง์ ์ด๋์์ผ ์ค๋ณต์ฝ๋๋ฅผ ์ ๊ฑฐํ์์ต๋๋ค.
if (leftKeys.includes(n)) {
left = pos;
return 'L';
} else if (rightKeys.includes(n)) {
right = pos;
return 'R';
} else {
const [leftDist, rightDist] = [distance(left, pos), distance(right, pos)];
const result = leftDist < rightDist || (leftDist === rightDist && hand === 'left') ? 'L' : 'R';
result === 'L' ? left = pos : right = pos;
4.
๊ทธ๋ฆฌ๊ณ else ๋ฌธ์ ์๋ ๋ณต์กํ ์กฐ๊ฑด๋ฌธ์ ๊ฐ๊ฒฐ์์ผฐ์ต๋๋ค.
๊ธฐ์กด์ ์ฝ๋
else {
let distance = (nowPosition) => Math.abs(nPosition[0] - nowPosition[0]) + Math.abs(nPosition[1] - nowPosition[1])
const leftD = distance(leftNow);
const rightD = distance(rightNow);
if (leftD === rightD) {
hand === "left" ? leftFn() : rightFn();
} else {
leftD < rightD ? leftFn() : rightFn();
}
}
๋ฆฌํฉํ ๋งํ ์ฝ๋
else {
const [leftDist, rightDist] = [distance(left, pos), distance(right, pos)];
const result = leftDist < rightDist || (leftDist === rightDist && hand === 'left') ? 'L' : 'R';
result === 'L' ? left = pos : right = pos;
return result;
}
์บฌ ์ผํญ์ฐ์ฐ์๋ ๋ ผ๋ฆฌ์ฐ์ฐ์ ๋ฅผ ์ด์ฉํด์ ์ ๋ ๊ฒ ๊ฐ๋จํ๊ฒ ๋ง๋ค ์ ์๊ตฌ๋...!
๋๋ ๊ฐ์ ๊ฒฝ์ฐ๋ ๋ค ๋ฐ๋ก ํด๋๋ฐ,
|| ๋ค์ ๊ฐ์ ๊ฒฝ์ฐ๋ ํด๋น๋๋๊น ๊ทธ ์ดํ์ ๋ง์ถฐ์ ๋ค์ L ์ ์ถ๋ ฅํ ์ง R ์ ์ถ๋ ฅํ ์ง๋ฅผ ๊ฒฐ์ ํ ์ ์๊ตฐ..!
L, R ์ ๋ํด์ ๋จผ์ ๊ฒฐ๋ก ์ ๋ด๋ฆฌ๊ณ , ๊ทธ์ ๋ฐ๋ผ pos (์ขํ) ๋ฅผ ๋ฃ์ด์ค๋ค.
๊ทธ๋ฆฌ๊ณ L ์ธ์ง R ์ธ์ง return ํด๋ฒ๋ฆผ.
๋ง์ง๋ง์ผ๋ก forEach ๋ณด๋ค map ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ์ซ์์ ๋ํ ํด๋ฆญ ๊ฒฐ๊ณผ๋ฅผ ์ฆ์ ๋ณํ์ ์์ผ
click ์ด๋ผ๋ ๋ฐฐ์ด์ ์ง์ ์ ์ํ ํ์๊ฐ ์์ด์ก์ต๋๋ค.
์ค... ์ด์ฐจํผ ๋ฐฐ์ด์ ๋ง๋ค๊ฑฐ๋๊น map ์ ์ด์ฉํด์ ํคํค ํ ๋ฐฐ์ด ์์ฒด๋ฅผ join("") ํ ๊ฐ์ return ํ๋ฉด ๋๊ฒ ๊ตฌ๋...!
์ ์ฒด ์์์ return ํด์ผํ๋ ๊ฐ์ด ๋ฐฐ์ด์ด๋ผ๋ฉด map ์ด ์๋ก์ด ๋ฐฐ์ด์ ๋ฐํํ๋ค๋ ๊ฑธ ์ด์ฉํ๋ฉด ๋ชฌ๊ฐ ๋ฉ์ง ์ฝ๋๋ฅผ ์งค ์ ์๊ตฐ!
๊ณต๋ถ ๋ค ํ์ผ๋ ๋ค์ ์ง๋ณด์..!!
'ํ์ ๊ณต๋ถ > ๐ซง ์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ || ํ๋ก๊ทธ๋๋จธ์ค] ๋ฌ๋ฆฌ๊ธฐ ๊ฒฝ์ฃผ (0) | 2023.08.07 |
---|---|
[์๊ณ ๋ฆฌ์ฆ || ํ๋ก๊ทธ๋๋จธ์ค] ๊ฐ์ธ์ ๋ณด ์์ง ์ ํจ๊ธฐ๊ฐ (0) | 2023.08.05 |
[์๊ณ ๋ฆฌ์ฆ || ํ๋ก๊ทธ๋๋จธ์ค] ํฌ๋ ์ธ ์ธํ ๋ฝ๊ธฐ ๊ฒ์ (0) | 2023.07.27 |
[์๊ณ ๋ฆฌ์ฆ] How do you improve? ๋ฌธ์ ํด๊ฒฐ ์ ๊ทผ๋ฒ (0) | 2023.07.20 |
[์๊ณ ๋ฆฌ์ฆ || ํ๋ก๊ทธ๋๋จธ์ค] ๋์ถฉ ๋ง๋ ์ํ (0) | 2023.07.20 |