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

๐Ÿƒ algorithm208

LeetCode 108 - Convert Sorted Array to Binary Search Tree (Easy) ๐Ÿ’ก ๋ฌธ์ œ LeetCode - 108๋ฒˆ ๐ŸŽฏ ํ’€์ด ๊ณผ์ • ๊ตฌ๊ฐ„ nums ์— ๋Œ€ํ•ด์„œ ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด nums ์˜ ์ค‘๊ฐ„๊ฐ’์„ ๋ฃจํŠธ๋…ธ๋“œ๋กœํ•˜๊ณ  ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋‘ ๊ตฌ๊ฐ„์— ๋Œ€ํ•ด ์žฌ๊ท€์ ์œผ๋กœ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š” ๋ญ˜๊นŒ์š”? ๊ตฌ๊ฐ„ nums์˜ ๊ฐœ์ˆ˜๋ฅผ x ๋ผ๊ณ  ํ•˜๊ณ  ๊ฐ„๋‹จํ•œ ์ฆ๋ช…์„ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. x ๊ฐ€ ์ง์ˆ˜(2n)์ด๋ฉด ๋‚˜๋จธ์ง€ ๋‘ ๊ตฌ๊ฐ„์€ (n, n-1) ๋กœ ๋‚˜๋‰˜๊ณ , ํ™€์ˆ˜(2n-1)๋ผ๋ฉด (n-1, n-1) ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ๋‘ ํŠธ๋ฆฌ๊ฐ„์˜ ๋†’์ด ์ฐจ์ด๊ฐ€ 1๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ๋Š” ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๐Ÿ‘จ‍๐Ÿ’ป ์ฝ”๋“œ /** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (va.. 2023. 6. 6.
LeetCode 328 - Odd Even Linked List (Medium) ๐Ÿ’ก ๋ฌธ์ œ LeetCode - 328๋ฒˆ ๐ŸŽฏ ํ’€์ด ๊ณผ์ • O(1) ์˜ ๊ณต๊ฐ„ ๋ณต์žก๋„์™€ O(n) ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด์„œ ํ™€์ˆ˜๋ฒˆ์งธ์™€ ์ง์ˆ˜๋ฒˆ์งธ์— ์œ„์น˜ํ•œ ๋…ธ๋“œ๋ฅผ ๋ถ„๋ฆฌํ•œ ๋’ค์— ๋‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์–ด์ฃผ๋Š” ์ž‘์—…์„ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ๋Š” ํ•ญ์ƒ ํ™€์ˆ˜๋ฒˆ์งธ ๋…ธ๋“œ์ด๊ณ  ํ™€์ˆ˜์™€ ์ง์ˆ˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์˜ค๋Š” ๊ฒƒ์€ ๋ช…๋ฐฑํ•œ ์‚ฌ์‹ค์ด๋‹ˆ, ์ œ์•ฝ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๊ธฐ ์œ„ํ•ด ํ•œ๋ฒˆ์˜ ๋ฆฌ์ŠคํŠธ ํƒ์ƒ‰ ๋„์ค‘์— prev ์™€ cur ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•ด์„œ ์ด์ „ ๋…ธ๋“œ์˜ ๋‹ค์Œ ๋…ธ๋“œ ํฌ์ธํ„ฐ๊ฐ€ ํ˜„์žฌ ๋…ธ๋“œ์˜ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•ฉ์น˜๊ธฐ ์œ„ํ•œ mergePointer ๋„ ๊ฐ€์žฅ ์ตœ์‹ ์˜ ํ™€์ˆ˜๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์ˆœํšŒ๋ฅผ ๋งˆ์น˜๋ฉด mergePointer ๋กœ ๋‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์–ด์ฃผ๋ฉด๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ž…๋ ฅ๋ฐ›๋Š” ๋ฆฌ์ŠคํŠธ์™€ ๋ณ„๊ฐœ๋กœ .. 2023. 5. 29.
LeetCode 704 - Binary Search (Easy) ๐Ÿ’ก ๋ฌธ์ œ LeetCode - 704๋ฒˆ ๐ŸŽฏ ํ’€์ด ๊ณผ์ • ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ ํŠน์ • target ์˜ index ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ด๋ถ„ ํƒ์ƒ‰ ์„ ์ด์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ‘จ‍๐Ÿ’ป ์ฝ”๋“œ /** * @param {number[]} nums * @param {number} target * @return {number} */ var search = function(nums, target) { let head = 0 let tail = nums.length - 1 let answer = -1 while (head target) { tail = mid - 1 } else { answer = mid break } } return answer }; 2023. 5. 14.
LeetCode 438 - Find All Anagrams in a String (Medium) ๐Ÿ’ก ๋ฌธ์ œ LeetCode - 438๋ฒˆ ๐ŸŽฏ ํ’€์ด ๊ณผ์ • ๋ฌธ์ž์—ด s ์—์„œ p ์˜ ์•„๋‚˜๊ทธ๋žจ์„ ๋งŒ์กฑํ•˜๋Š” ๋ชจ๋“  ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ์œ„์น˜๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๊ณ ๋ คํ•ด์„œ ์ตœ์ ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผํ•˜๋Š”๋ฐ, sliding window ๋ฅผ ํ™œ์šฉํ•˜๋ฉด O(n) ์— ๋ชจ๋“  ์œ„์น˜์—์„œ ์•„๋‚˜๊ทธ๋žจ์„ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € p ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฌธ์ž ๋นˆ๋„์ˆ˜ ํ•ด์‹œ๋งต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ left ์™€ right , ์•„๋‚˜๊ทธ๋žจ ๊ตฌ์„ฑ์— ํ•„์š”ํ•œ ๋ฌธ์ž ๊ฐœ์ˆ˜์˜ ํ•ฉ์„ ์œ„ํ•œ count ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. count ๊ฐ€ 0์ด ๋˜๋ฉด ๋ชจ๋“  ๋ฌธ์ž๋“ค์ด ํ•„์š”ํ•œ ๋นˆ๋„์ˆ˜๋งŒํผ ๋ฐœ๊ฒฌ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. window ์˜ ํฌ๊ธฐ๋Š” ๊ณง p ์˜ ๊ธธ์ด์™€ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— left ์™€ right ๊ฐ„์˜ ๊ฐ„๊ฒฉ์ด window size ์— ๋„๋‹ฌํ•˜๋ฉด left ๋ฅผ ํ•˜๋‚˜.. 2023. 5. 14.
LeetCode 42 - Trapping Rain Water (Hard) ๐Ÿ’ก ๋ฌธ์ œ LeetCode - 42๋ฒˆ ๐ŸŽฏ ํ’€์ด ๊ณผ์ • ์›…๋ฉ์ด๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹จ์กฐ๊ฐ์†Œ ๊ตฌ๊ฐ„์„ ์•Œ์•„์•ผํ•ฉ๋‹ˆ๋‹ค. O(n) ์— ์ด๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ๋ฌด์—‡์ผ๊นŒ์š”? ์ด๋ฅผ ์œ„ํ•ด monotonic stack์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. height ์˜ ์ธ๋ฑ์Šค๋ฅผ i ๋ผ๊ณ  ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. (a) height[i] ๊ฐ€ stack top ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ๊ทธ๋ƒฅ push ํ•ฉ๋‹ˆ๋‹ค. (b) stack top ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋ฉด push ํ•˜๊ธฐ์ „์— stack ์—์„œ height[i] ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ์š”์†Œ๋“ค์„ ๋ชจ๋‘ pop ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ ์›…๋ฉ์ด์˜ ํฌ๊ธฐ๋ฅผ ์•Œ๋ ค๋ฉด ๋†’์ด * ๋„ˆ๋น„ ๋ฅผ ์•Œ์•„์•ผํ•ฉ๋‹ˆ๋‹ค. ๋„ˆ๋น„๋Š” index ๊ฐ’์œผ๋กœ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๊ณ , ๋†’์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. min(height[stack[top-1]], height[i]).. 2023. 4. 30.
LeetCode 238 - Product of Array Except Self (Medium) ๐Ÿ’ก ๋ฌธ์ œ LeetCode - 238๋ฒˆ ๐ŸŽฏ ํ’€์ด ๊ณผ์ • ๋ฐฐ์—ด num ์—์„œ i ๋ฒˆ์งธ ์š”์†Œ๋งŒ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์š”์†Œ๋“ค์˜ ๊ณฑ์„ i ๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ํ• ๋‹นํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ O(n) ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋กœ ์ˆ˜ํ–‰๋˜์–ด์•ผํ•˜๊ณ , ๋‚˜๋ˆ„๊ธฐ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋˜๋Š” ์ œ์•ฝ์กฐ๊ฑด์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ i ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์š”์†Œ๋“ค์˜ ๊ณฑ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜๋ˆ ์„œ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. answer[i] = num[0...i-1] * num[i+1...] ๋ถ€๋ถ„ํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ฐจ์šฉํ•˜๋ฉด, ์œ„์—์„œ ํ•„์š”ํ•œ ๊ตฌ๊ฐ„๊ณฑ์„ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•ด๋†“์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฐฐ์—ด์—๋Š” ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ ๋ˆ„์ ํ•œ ๊ณฑ์„ ์ €์žฅํ•˜๊ณ , ๋‹ค๋ฅธ ๋ฐฐ์—ด์—๋Š” ์˜ค๋ฅธ์ชฝ์—์„œ๋ถ€ํ„ฐ ๋ˆ„์ ํ•œ ๊ณฑ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์œ„ ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๊ฟ”์„œ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. answer[i] = prefixLeft[.. 2023. 4. 24.