๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿƒ algorithm/leetcode93

LeetCode 35 - Search Insert Position (Easy) ๐Ÿ’ก ๋ฌธ์ œ LeetCode -35๋ฒˆ ๐ŸŽฏ ํ’€์ด ๊ณผ์ • target ์ด ๋ฐฐ์—ด์— ์กด์žฌํ•  ๊ฒฝ์šฐ ํ•ด๋‹น ์š”์†Œ์˜ index๋ฅผ, ๋งŒ์•ฝ ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ target ์ด ์œ„์น˜ํ•ด์•ผํ•  index ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ ์กฐ๊ฑด์—์„œ ๋”ฐ๋ผ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ ์ด๋ถ„ ํƒ์ƒ‰ ์„ ์‚ฌ์šฉํ•˜๋ฉด O(logn) ์— ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ‘จ‍๐Ÿ’ป ์ฝ”๋“œ /** * @param {number[]} nums * @param {number} target * @return {number} */ var searchInsert = function(nums, target) { let answer = null function findItem(head, tail) { if (head >= tail) { if (nums[head] === target).. 2023. 2. 20.
LeetCode 169 - Majority Element (Easy) ์ตœ๊ทผ ๋ช‡๋‹ฌ๋™์•ˆ LeetCode ๋ฌธ์ œํ’€์ด๋ฅผ ๋ชปํ–ˆ๋Š”๋ฐ, ์˜ฌํ•ด์—๋Š” ์žฌ๋ฏธ์™€ ์„ฑ์ทจ๊ฐ์„ ์œ„ํ•ด ์‹œ๊ฐ„ ๋‚ ๋•Œ๋งˆ๋‹ค ์งฌ๋‚ด์„œ ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ๋ฅผ ํ•˜๋‚˜์”ฉ ๋‹ค์‹œ ํ’€์–ด๋ณด๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜„ ๐Ÿ’ก ๋ฌธ์ œ LeetCode - 169๋ฒˆ ๐ŸŽฏ ํ’€์ด ๊ณผ์ • n ํฌ๊ธฐ์˜ ๋ฐฐ์—ด์ด ์ฃผ์–ด์งˆ ๋•Œ, ๊ณผ๋ฐ˜์ˆ˜ ์ด์ƒ์˜ ์š”์†Œ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ํ•ด์‹œ๋งต์„ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„ํ• ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ข€ ๋” ์ตœ์ ํ™”๋œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์š”๊ตฌ์กฐ๊ฑด์— ์˜ํ•ด ๊ณผ๋ฐ˜์ˆ˜๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ์š”์†Œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์ด ๋ณด์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์ด์–ด-๋ฌด์–ด ๊ณผ๋ฐ˜์ˆ˜ ํˆฌํ‘œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ ํ™œ์šฉํ•˜๋ฉด O(n) ์˜ ์‹œ๊ฐ„๋ณต์žก๋„์™€ O(1) ์˜ ๊ณต๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋Š” ํ’€์ด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฐ„๋‹จํžˆ ํ’€์–ด๋ณด์ž๋ฉด, ๊ธธ์ด n ์„ ๊ฐ€์ง€๋Š” ๋ฐฐ์—ด A ์—์„œ ๊ณผ๋ฐ˜์ˆ˜๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ์š”์†Œ a๊ฐ€ [n/2 + 1] ๊ฐœ ์žˆ์„ ๊ฒฝ์šฐ์— ๋‚˜๋จธ์ง€ ์š”์†Œ.. 2023. 2. 5.
LeetCode 733 - Flood Fill (Easy) ๐Ÿ’ก ๋ฌธ์ œ LeetCode - 733๋ฒˆ ๐ŸŽฏ ํ’€์ด ๊ณผ์ • BFS ๋ฅผ ์ด์šฉํ•ด์„œ ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ง€์ ์„ ํ™•์ธํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ visit ์ด๋ผ๋Š” 2์ฐจ์› ๋ฐฐ์—ด์„ ์œ ์ง€ํ•˜๋ฉฐ ์ค‘๋ณต ๋ฐฉ๋ฌธ์„ ๊ฒ€์‚ฌํ•จ๊ณผ ๋™์‹œ์— ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ ์œ„์น˜๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ‘จ‍๐Ÿ’ป ์ฝ”๋“œ /** * @param {number[][]} image * @param {number} sr * @param {number} sc * @param {number} newColor * @return {number[][]} */ var floodFill = function (image, sr, sc, newColor) { const dr = [0, 0, 1, -1] const dc = [1, -1, 0, 0] const [ROW, COL] = [image.length, .. 2022. 3. 7.
LeetCode 229 - Majority Element II (Medium) ๐Ÿ’ก ๋ฌธ์ œ LeetCode - 229๋ฒˆ ๐ŸŽฏ ํ’€์ด ๊ณผ์ • ๋ฐฐ์—ด์— ๋‹ด๊ธด ์ˆซ์ž๋“ค ์ค‘์—์„œ ์ผ์ • ๊ธฐ์ค€๊ฐ’ ์ด์ƒ์˜ ์ˆซ์ž๋“ค์„ ์ฐพ์•„์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋ฐฐ์—ด์— ๋‹ด๊ธธ ์ˆ˜ ์žˆ๋Š” ์ˆซ์ž์˜ ๋ฒ”์œ„๊ฐ€ ํฌ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด์‹ฑ์„ ์ด์šฉํ•ด์„œ ์ˆซ์ž๋“ค์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์–ด์ค๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๊ฐ์ฒด ๋Œ€์‹ ์— ์ฝ๊ณ  ์“ฐ๋Š” ์„ฑ๋Šฅ์ด ๋” ๋›ฐ์–ด๋‚œ Map ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ‘จ‍๐Ÿ’ป ์ฝ”๋“œ var majorityElement = function (nums) { const numCount = new Map(); const pivot = nums.length / 3; for (const num of nums) { if (numCount.has(num)) { const oldVal = numCount.get(num); numCount.set(num, oldVal + 1); } else.. 2022. 2. 22.
LeetCode 300 - Longest Increasing Subsequence (Medium) ๋ฌธ์ œ LeetCode - 300๋ฒˆ ํ’€์ด ๊ณผ์ • ๊ฐ€์žฅ ๊ธด ๋ถ€๋ถ„์ˆ˜์—ด์„ ๊ตฌํ•˜๋Š” LIS ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋™์  ๊ณ„ํš๋ฒ• ์„ ์ด์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ด๋ถ„ ํƒ์ƒ‰ ์„ ์ด์šฉํ•˜๋ฉด Nlog(N) ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * @param {number[]} nums * @return {number} */ var lengthOfLIS = function (nums) { const memo = []; for (const num of nums) { if (memo.length === 0) { memo.push(num); continue; } if (memo.length > 0 && memo[memo.length - 1] < num) { memo.push(num); } else { const idx .. 2021. 6. 14.
LeetCode 36 - Valid Sudoku (Medium) ๋ฌธ์ œ LeetCode - 36๋ฒˆ ํ’€์ด ๊ณผ์ • ์Šค๋„์ฟ  ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋Œ€์‹  ๋ชจ๋“  ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ณ  ์ฑ„์›Œ์ง„ ์ˆซ์ž๋“ค์— ๋Œ€ํ•ด์„œ ์Šค๋„์ฟ  ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ํŒ๋‹จํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋จผ์ € 3x3 ํฌ๊ธฐ์˜ ์„œ๋ธŒ ๋ฐ•์Šค๋“ค์—์„œ 19 ์‚ฌ์ด์˜ ์ˆซ์ž๋“ค ์ค‘ ์ค‘๋ณต์ด ์กด์žฌํ•˜๋Š”์ง€ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ๊ฐ ํ–‰๊ณผ ์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 19 ์‚ฌ์ด์˜ ์ˆซ์ž ์ค‘๋ณต์„ฑ์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * @param {character[][]} board * @return {boolean} */ var isValidSudoku = function (board) { const isSubboxRepetition = checkSubboxes(board); if (!isSubboxRepetition) { return false; } for (let .. 2021. 4. 13.