๐ช Programming
[Algorithm] ์ ํด๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ / ์์ธ์๋ถํด๋ก ์ต์๊ณต๋ฐฐ์ ์ต๋๊ณต์ฝ์ ๊ณ์ฐํ๊ธฐ
[Algorithm] ์ ํด๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ / ์์ธ์๋ถํด๋ก ์ต์๊ณต๋ฐฐ์ ์ต๋๊ณต์ฝ์ ๊ณ์ฐํ๊ธฐ
2024.05.26N๊ฐ์ ์ต์๊ณต๋ฐฐ์ํ๋ก๊ทธ๋๋จธ์ค ๋ ๋ฒจ 2์ 12953๋ฒ ๋ฌธ์ ๋ N๊ฐ์ ์ต์๊ณต๋ฐฐ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ๋ค. ์ต์๊ณต๋ฐฐ์๋ ์
๋ ฅ๋ ๋ ์์ ๋ฐฐ์ ์ค ๊ณตํต์ด ๋๋ ๊ฐ์ฅ ์์ ์ซ์๋ฅผ ์๋ฏธํ๋ค. ์๋ฅผ๋ค์ด 2์ 7์ ์ต์๊ณต๋ฐฐ์๋ 14๊ฐ ๋๋ค. ์ฃผ์ด์ง ๋ฐฐ์ด(arr)์์ ๊ฐ์ฅ ํฐ ์์ ๋ฐฐ์๋ฅผ ๋๋จธ์ง ์์์ ๋๋ด์ ๋ ๋ชจ๋ 0์ด ๋๋ ์๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ผ๋ก ํ์์ง๋ง, ๋งค๋ฒ ํฐ ์๋ฅผ ์ ์ธํ ๋ฐฐ์ด์ ๋ชจ๋ ์ซ์๋ฅผ ํ๋์ฉ ๋๋ ๋ด์ผ ํ๊ธฐ ๋๋ฌธ์ ํจ์จ์ ์ด์ง ์๋ค. ๋ฐฐ์ด ์ ๋ ฌ์ ์ ์ธํ๊ณ ๋ฐฐ์ด ๊ธธ์ด๊ฐ n, while๋ฌธ์ ๋ฐ๋ณต ํ์๊ฐ x์ด๋ผ๊ณ ํ์ ๋ ์๊ฐ๋ณต์ก๋๋ $O(n \cdot x)$๊ฐ ๋๋ค.function solution(arr) { const sortedArray = arr.sort((a, b) => b - a); const [bigges..
[TS] ํ์
์คํฌ๋ฆฝํธ ๊ตฌ์กฐ์ ํ์ดํ ํ์ฉํ๊ธฐ
[TS] ํ์ ์คํฌ๋ฆฝํธ ๊ตฌ์กฐ์ ํ์ดํ ํ์ฉํ๊ธฐ
2024.05.25Object.keys ๋ฉ์๋์ ํ์
์ ์ํ์
์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ค ๋ณด๋ฉด ์๋ ๊ฐ์ ์ํฉ์ ์์ฃผ ๋ง์ฃผํ๋ค. Object.keys() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ๊ฐ์ฒด์ ํค๋ฅผ ๋ฐฐ์ด๋ก ์ถ์ถํ ํ, ํด๋น ํค๋ฅผ ์ด์ฉํด ๊ฐ์ฒด์ ์ ๊ทผํ ๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.type Options = { host: string; port: number };const validateOptions = (options: Options) => { const keys = Object.keys(options); // string[] keys.forEach((key) => { // Error! 'Options' ํ์์์ 'string' ํ์์ ๋งค๊ฐ ๋ณ์๊ฐ ํฌํจ๋ ์ธ๋ฑ์ค ์๊ทธ๋์ฒ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. if (options[key] === null) ..
[Algorithm] ๋
๋ฐ๋จน๊ธฐ ์๊ณ ๋ฆฌ์ฆ / ๋์ ๊ณํ๋ฒ
[Algorithm] ๋ ๋ฐ๋จน๊ธฐ ์๊ณ ๋ฆฌ์ฆ / ๋์ ๊ณํ๋ฒ
2024.05.25๋์ ๊ณํ๋ฒ๋์ ๊ณํ๋ฒ(Dynamic Programming, DP)์ ๋ณต์กํ ๋ฌธ์ ๋ฅผ ๋ ์์ ํ์ ๋ฌธ์ ๋ก ๋ถํ ํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ฉด์ ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ด๋ฅผ ํตํด ๋ฌธ์ ์ ์ฐ์ฐ ์๊ฐ์ ํจ๊ณผ์ ์ผ๋ก ์ค์ผ ์ ์๋ค. ๋์ ๊ณํ๋ฒ์ ์ ์ฉํ๊ธฐ ์ํด์ ๋ค์ ๋ ๊ฐ์ง ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํ๋ค. ํผ๋ณด๋์น ์์ด์ด ์๋ ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ํ์ ์ธ ์. ์ต์ ํ์ ๊ตฌ์กฐ Optimal Substructure์์ ํ์ ๋ฌธ์ ์ ์ต์ ํด๋ฅผ ์กฐํฉํ์ฌ ์ ์ฒด ๋ฌธ์ ์ ์ต์ ํด๋ฅผ ์ป์ ์ ์๋ค.ํ์ ๋ฌธ์ ์ค์ฒฉ Overlapping Subproblem๋์ผํ ํ์ ๋ฌธ์ ๊ฐ ๋ฐ๋ณต์ ์ผ๋ก ๋ฐ์ํ๋ค. ๋์ ๊ณํ๋ฒ์ ์ค๋ณต ๊ณ์ฐ ๋ฐฉ์ง๋ฅผ ์ํด ๋ฉ๋ชจ์ด์ ์ด์
ํน์ ํ๋ทธ๋ ์ด์
๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ค. ๋ฉ๋ชจ์ด์ ์ด์
์ ์ฌ๊ท ํธ์ถ์ ์ฌ์ฉํ์ฌ ํ์ํ ๋ฌธ์ ๋ง ๊ณ์ฐํ..
[JS] split() ๋ฉ์๋์์ ๋น ๋ฌธ์์ด์ด ์๊ธฐ๋ ์๋ฆฌ
[JS] split() ๋ฉ์๋์์ ๋น ๋ฌธ์์ด์ด ์๊ธฐ๋ ์๋ฆฌ
2024.05.24str.split(separator, limit?) ๋ฉ์๋๋ ๊ตฌ๋ถ์(separator)๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฌธ์์ด์ ๋ถ๋ฆฌํ ๋ ์ฌ์ฉํํ๋ค. ์ฌ์ฉ๋ฒ๋ ๊ฐ๋จํ๊ณ ๊ฐ๋ฐํ๋ฉด์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ๋ฉ์๋ ์ค ํ๋๋ค. ํ์ง๋ง split()์ ์ฌ์ฉํ๋ค๋ณด๋ฉด ์๋์น ์๊ฒ '' ๋น ๋ฌธ์์ด์ด ์๊ธฐ๋ ์ํฉ์ด ์ข
์ข
๋ฐ์ํ๋ค. split() ๋ฉ์๋๋ ๋ฌธ์์ด ์์ ์ง์ ๋ถํฐ ๊ตฌ๋ถ์๋ฅผ ํ์ํ๋ฉด์ ๊ทธ ์ฌ์ด์ ์ด๋ค ๋ฌธ์์ด์ด ์กด์ฌํ๋์ง ํ์ธํ๋ค. ๋ง์ฝ ๊ตฌ๋ถ์๋ฅผ ์ ์ธํ๊ณ ๋ค๋ฅธ ๋ฌธ์์ด์ด ์์ผ๋ฉด ๋น ๋ฌธ์์ด์ ๋ฐํํ๋ค. ์ ๋ฆฌํ๋ฉด ์๋ 3๊ฐ์ง ์ํฉ์ ๋ถํฉํ ๋๋ง๋ค ๋น ๋ฌธ์์ด์ด ๋ฐ์ํ๋ค. ๊ตฌ๋ถ์๊ฐ ๋ฌธ์์ด ์ฒ์์ ์์นํ ๋๊ตฌ๋ถ์๊ฐ ๋ฌธ์์ด ๋ง์ง๋ง์ ์์นํ ๋๊ตฌ๋ถ์ ๋ ๊ฐ๊ฐ ์ฐ์์ผ๋ก ๋ํ๋ ๋'?apple'.split('?'); // ['', 'apple']'??..
[React] Proxy๋ฅผ ํ์ฉํ Custom Lazy Import
[React] Proxy๋ฅผ ํ์ฉํ Custom Lazy Import
2024.05.24React.lazy()React์์ ์ฝ๋ ๋ถํ ์ ๋ชฉ์ ์ผ๋ก(Chunk ๋ถ๋ฆฌ) ์ปดํฌ๋ํธ๋ฅผ Dynamic Import ํ ๋ React.lazy() ํจ์๋ฅผ ์ฌ์ฉํ๋ค. ์ปดํฌ๋ํธ๊ฐ ํ์ํ ์์ ์๋ง ๋ก๋๋๊ธฐ ๋๋ฌธ์, ๋ก๋ฉ ์ค ํ์ํ ์ปดํฌ๋ํธ๋ ๋ฉ์์ง๋ ๋ฅผ ํ์ฉํ์ฌ ์ค์ ํ๋ค. ์ฌ๋ฌ ๊ฐ์ lazy ์ปดํฌ๋ํธ๋ฅผ ๋ฌถ์ด์ fallback์ ํ ๋ฒ์ ํ์ํ ์๋ ์๋ค. ๋ํ, React.lazy()๋ก ๋ถ๋ฌ์ค๋ ค๋ ์ปดํฌ๋ํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก default export๋ฅผ ์ฌ์ฉํด์ ๋ด๋ณด๋ด์ผ ํ๋ค.// Child.tsxexport default function Child() { /* ... */ }// Parent.tsximport { Suspense } from 'react';// ์ปดํฌ๋ํธ ๋ฐ๋์์ ํธ์ถํ๋ฉด ์ ์ ์๋ํ์ง ์์ผ๋ฏ๋ก ์ฃผ์co..
[Vite] ์ด๊ธฐ ๋ก๋ ์๊ฐ ๊ฐ์ ์ ์ํ Vendor Chunk ์ชผ๊ฐ๊ธฐ
[Vite] ์ด๊ธฐ ๋ก๋ ์๊ฐ ๊ฐ์ ์ ์ํ Vendor Chunk ์ชผ๊ฐ๊ธฐ
2024.05.24Introํ๋ก ํธ์๋ ์์ญ์์ .jsx, .tsx, .vue ๋ฑ์ ํ์ฅ์๋ฅผ ๊ฐ์ง ํ์ผ์ ์ฌ์ฉํ์ง๋ง ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฅผ ์ดํดํ์ง ๋ชปํ๋ค. ๋๋ฌธ์ ์ด๋ฌํ ํ์ผ๋ค์ ๋ชจ๋ .js ํ์ผ๋ก ๋ณํํด์ผ ํ๋ค. ๋ชจ๋ ํ์ผ์ ํ๋์ .js ํ์ผ๋ก ๋ง๋ค ์ ์์ง๋ง ์ด ๋ฐฉ์์ ์ฑ๋ฅ์ ๋ถ์ ์ ์ธ ์ํฅ์ ์ค ์ ์์ผ๋ฏ๋ก ๊ถ์ฅ๋์ง ์๋๋ค. ๋์ ์ฌ๋ฌ .js ํ์ผ(chunks)๋ก ๋ณํํ ๋ค ํ์ํ ์๊ฐ์๋ง ๋ก๋(์ง์ฐ ๋ก๋ฉ)ํ๋๊ฒ ์ฑ๋ฅ์ ๋ ์ ๋ฆฌํ๋ค. ํนํ ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ์ ์ค์ผ ๋ ์ ์ฉํ๋ค. Vite, Webpack ๊ฐ์ ๋ฒ๋ค๋ฌ๋ ๋ณดํต index, vendor ๋ ๊ฐ์ ๋ฉ์ธ chunk๋ฅผ ์์ฑํ๋ค. ์ฐธ๊ณ ๋ก Vite 2.9 ๋ฒ์ ๋ถํด Production ์ข
์์ฑ ๋ชจ๋์ด index chunk์ ํฌํจ๋๋ค.index : App.tsx์ ๊ฐ์ ์ดํ๋ฆฌ์ผ์ด..
[Markdown] GitHub ๋งํฌ๋ค์ด ์์ฑ ๊ฟํ ๋ชจ์
[Markdown] GitHub ๋งํฌ๋ค์ด ์์ฑ ๊ฟํ ๋ชจ์
2024.05.23Admonition Box์ธ์ฉ๊ตฌ(Blockquote)๋ฅผ ํ์ฉํด์ ์ค์ํ ์ ๋ณด๋ฅผ ๊ฐ์กฐํ ์ ์๋ค. NOTE, IMPORTANT, WARNING ์ธ ๊ฐ์ง ํ์
์ ์ง์ํ๋ฉฐ, ๊ฐ ํ์
์ ํด๋นํ๋ ์์ด์ฝ๊ณผ ์ปฌ๋ฌ๋ก ์๋ ๋ณ๊ฒฝ๋๋ค. ์ฐธ๊ณ ๋ก README.md ๋งํฌ๋ค์ด ํธ์ง๊ธฐ์์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ(Preview)๋ก ํ์๋์ง ์์ง๋ง ์ ์ฅ ํ์ ์ ์์ ์ผ๋ก ํ์๋๋ค.> [!NOTE] > Highlights information that users should take into account, even when skimming.> [!IMPORTANT] > Crucial information necessary for users to succeed.> [!WARNING] > Critical content demanding immed..
[JS] ์๋ฐ์คํฌ๋ฆฝํธ ES2023 ๋ถ๋ณ์ฑ ๋ฐฐ์ด ๋ฉ์๋ ํบ์๋ณด๊ธฐ
[JS] ์๋ฐ์คํฌ๋ฆฝํธ ES2023 ๋ถ๋ณ์ฑ ๋ฐฐ์ด ๋ฉ์๋ ํบ์๋ณด๊ธฐ
2024.05.23Mutable / ImmutableArray.sort(), Array.reverse(), Array.splice() ๊ฐ์ ๋ฐฐ์ด ๋ฉ์๋๋ ์๋ณธ ๋ฐฐ์ด์ ๋ณ๊ฒฝํ๋ค. ๊ฐ์ฒด(๋ฐฐ์ด) ์์ฒด๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์์ํ์ง ๋ชปํ ์ฌ์ด๋ ์ดํํธ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์๋ ์ฝ๋์์ reversed๋ ๊ฒฐ๊ณผ์ ์ผ๋ก regions ๋ฐฐ์ด์ ๊ฐ๋ฆฌํค๊ณ ์๋ค. ์ฆ, regions reversed ์ด ๋์ ๋์ผํ๋ค.const regions = ['Seoul', 'Shanghai', 'Tokyo'];const reversed = regions.reverse();console.log(regions); // ['Tokyo', 'Shanghai', 'Seoul']console.log(reversed); // ['Tokyo', 'Shanghai', 'Seoul..
[JS] ์์ด ์ถ์ฝ์ด ๊ด๋ จ ์ ํธ๋ฆฌํฐ ํจ์ ๋ชจ์
[JS] ์์ด ์ถ์ฝ์ด ๊ด๋ จ ์ ํธ๋ฆฌํฐ ํจ์ ๋ชจ์
2024.05.22์ฐธ๊ณ ๋ด์ฉ์์ด์์ Contraction(์ถ์ฝ/๋จ์ถํ)๊ณผ Abbreviation(์ฝ์ด/์ถ์ฝ์ด)๋ ๋ค๋ฅธ ๊ฐ๋
์ด๋ค. Contraction: ๋ ๋จ์ด๋ฅผ ํ๋๋ก ์ค์ด๊ธฐ ์ํด ์ผ๋ถ ๋ฌธ์๋ฅผ ์๋ตํ๊ณ ์ํฌ์คํธ๋กํผ๋ก ๋์ฒดํ ํํ e.g. I will → I'll, do not → don'tAbbreviation: ๋จ์ด๋ ๊ตฌ์ ์ผ๋ถ ๋ฌธ์๋ง์ ์ฌ์ฉํ์ฌ ์ค์ธ ํํ. ์ํฌ์คํธ๋กํผ๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค e.g. United States → U.S., Doctor → Dr. ์ถ์ฝ์ ๋ถ๋ฆฌ ๊ธฐ์ค์์ ์ ์ธํ๋ ์ ๊ท์๋จ์ด ๋ฌธ์๊ฐ ์๋ ๋ฌธ์์ด ๊ธฐ์ค์ผ๋ก ๋ถ๋ฆฌ// ๋จ์ด ๋ฌธ์๊ฐ ์๋ ๋ฌธ์์ด๊ณผ ์ผ์นconst NonWordCharPattern = /(\W)/g;const sentence = "I'll make coffee and I've done m..
[Algorithm] ๋ณต์กํ DOM ์์ ๋ก ๋ณด๋ DFS ํ์ ์๊ณ ๋ฆฌ์ฆ
[Algorithm] ๋ณต์กํ DOM ์์ ๋ก ๋ณด๋ DFS ํ์ ์๊ณ ๋ฆฌ์ฆ
2024.05.22๋ชฉํ์๋ DOM ๊ตฌ์กฐ์์ ๊ฐ์ฅ ์์ชฝ ์์๋ถํฐ ์์ํด ๋ถ๋ชจ ์์๋ก ๊ฐ ์๋ก ์ค์ฒฉ ๋ ๋ฒจ์ด 1์ฉ ๋์ด๋๊ณ , class์ ๋์ํ๋ dataset์ ์ค์ฒฉ ๋ ๋ฒจ ๊ฐ์ ํ ๋นํด์ผ ํ๋ค. ์๋ฅผ๋ค์ด class๊ฐ "clause" ์ด๊ณ , ํด๋น ์์์ ์ค์ฒฉ ๋ ๋ฒจ์ด 2๋ผ๋ฉด data-clause-lv="2" ์์ฑ์ ํ ๋นํ๋ค. Hello ; ๋ง์ฝ ์์ ์์๊ฐ 2๊ฐ ์ด์์ผ ๋ ์์ ์์๋ค์ค ์ค์ฒฉ ๋ ๋ฒจ์ด ๊ฐ์ฅ ๋์ ๊ฐ + 1์ด ๋ถ๋ชจ ์์์ ์ค์ฒฉ ๋ ๋ฒจ์ด ๋๋ค. ์๋ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก 1๋ฒ์งธ ์์์ ์ค์ฒฉ ๋ ๋ฒจ(data-word-lv="1") ๋ณด๋ค, 2๋ฒ์งธ ์์์ ์ค์ฒฉ ๋ ๋ฒจ(data-phrase-lv="2")์ด ๋ ๋์ผ๋ฏ๋ก, ๋ถ๋ชจ ์์์ ์ค์ฒฉ๋ ๋ฒจ์ 3์ด ๋๋ค(data-clause-lv="3"). ..
[Algorithm] ๋ฐ์ดํฐ ์ถ๊ฐ, ์ญ์ , ์ ๋ ฌ๋ก ๋ณด๋ BFS / DFS ํ์ ์๊ณ ๋ฆฌ์ฆ
[Algorithm] ๋ฐ์ดํฐ ์ถ๊ฐ, ์ญ์ , ์ ๋ ฌ๋ก ๋ณด๋ BFS / DFS ํ์ ์๊ณ ๋ฆฌ์ฆ
2024.05.21์์ ๋ฐ์ดํฐ๋จ์ด ํน์ ๋ฌธ์ฅ๋ถํธ(' ์ํฌ์คํธ๋กํผ ์ ์ธ)๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ถ๋ฆฌํ ํ ํฐ ์ธ๋ฑ์ค ์ ๋ณด๊ฐ ๋ด๊ธฐ๋ Part ๊ฐ์ฒด๊ฐ ์๋ค. ์ด Part ๊ฐ์ฒด๋ child ๋ฐฐ์ด์ ๊ฐ์ง๋ฉฐ, child ๋ฐฐ์ด์ ๊ฐ ์์์ธ Part๋ ๋ถ๋ชจ Part์ ํ ํฐ ์ธ๋ฑ์ค ๋ฒ์ ๋ด์ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง๋ค. ์๋ฅผ๋ค์ด ๋ถ๋ชจ Part์ ํ ํฐ ์ธ๋ฑ์ค ๋ฒ์๊ฐ 2~13์ด๋ผ๋ฉด ์์ Part์ ํ ํฐ ์ธ๋ฑ์ค๋ 3~13(3~13, 4~13, ...) ํน์ 2~12(2~12, 2~11, ...) ๋ฒ์๋ฅผ ๊ฐ์ง๋ค.[ // parts ๋ฐฐ์ด { id: 0, // part begin: 2, end: 13, kc: [{ id: 'kc-1', /* ... */ }], child: [ // parts ๋ฐฐ์ด { id: 1, // ..
[React/JS] ๋๋๊ทธํ ๋ฌธ์์ด ๋ถ๋ฆฌ(๋ฉํ)ํ๊ธฐ / Selection API
[React/JS] ๋๋๊ทธํ ๋ฌธ์์ด ๋ถ๋ฆฌ(๋ฉํ)ํ๊ธฐ / Selection API
2024.05.21์๋์ ๊ฐ์ ๋ฌธ์์ด์ด ์์ ๋ ๋ง์ฐ์ค๋ก ๋๋๊ทธํด์ ํ
์คํธ๋ฅผ ์ ํํ ๋๋ง๋ค ํ๊ทธ๋ก ๊ฐ์ธ๋๋ก ๊ตฌํํ๋ ๊ฒ ๋ชฉํ. Pharetra convallis hendrerit integer nec eleifend tellus luctus lorem dignissimPharetra convallis hendrerit integer nec eleifend tellus luctus lorem dignissimPharetra convallis hendrerit integer nec eleifend tellus luctus lorem dignissim ๋๋๊ทธํ ๋ฌธ์์ด ๋ฉํโถ ๋ง์ฐ์ค ํด๋ฆญ/ํ
์คํธ ๋๋๊ทธ/ํด๋ฆญ ํด์ → onMouseUp ์ด๋ฒคํธ ํธ์ถ โท ์ ํํ ์์ญ์ ๋ํ Selection ๊ฐ์ฒด ํ๋const selection =..