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

๐Ÿƒ algorithm/leetcode93

LeetCode 283 - Move Zeroes (Medium) ๋ฌธ์ œ LeetCode - 283๋ฒˆ ํ’€์ด ๊ณผ์ • ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•œ ๋’ค์— ๊ฐ™์€ ํ‚ค ๊ฐ’์„ ๊ฐ€์ง€๋Š” ์›์†Œ๋“ค์˜ ์ˆœ์„œ๊ฐ€ ๋’ค๋ฐ”๋€Œ์ง€ ์•Š๋Š” ๊ฒƒ์„ stable sort ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ๋ฌธ์ œ์—์„œ๋Š” ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์—์„œ 0์„ ๋ฐฐ์—ด์˜ ๋์ชฝ์œผ๋กœ ์˜ฎ๊ฒจ์ฃผ๋˜ ๊ทธ ์ˆœ์„œ๊ฐ€ ๋’ค๋ฐ”๋€Œ๋ฉด ์•ˆ๋˜๋Š” ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ๋ณ„๋„์˜ array ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋ฉด ์•ˆ๋˜๊ณ  ๋ฐฐ์—ด ๋‚ด์—์„œ ์ •๋ ฌ์ด in-place ๋กœ ์ˆ˜ํ–‰๋˜์–ด์•ผํ•˜๋ฏ€๋กœ ์‚ฝ์ž…์ •๋ ฌ์„ ํ™œ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‚ฝ์ž… ์ •๋ ฌ ์€ ๋ฐฐ์—ด์˜ ๋ ์›์†Œ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์ž์‹ ์˜ ์œ„์น˜๋ฅผ ์ฐพ์•„ ์‚ฝ์ž… ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ๋Š” 0์„ ๋ฐœ๊ฒฌํ•  ๋•Œ๋งˆ๋‹ค 0์ด ์œ„์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ์ฐพ์Œ์œผ๋กœ์„œ O(N^2) ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * @param {number[]} nums * @return {.. 2021. 3. 2.
LeetCode 678 - Valid Parenthesis String (Medium) ๋ฌธ์ œ LeetCode - 678๋ฒˆ ํ’€์ด ๊ณผ์ • ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์—์„œ ๊ด„ํ˜ธ์Œ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ง์ง€์–ด์กŒ๋Š”์ง€ ํŒ๋‹จํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด ๋ฌธ์ œ์—์„œ๋Š” ์™€์ผ๋“œ์นด๋“œ(*) ๊ฐ€ ์กด์žฌํ•˜์—ฌ ์•ฝ๊ฐ„์˜ ๋‹ค๋ฅธ ๋ฐฉ์‹์˜ ์ ‘๊ทผ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์šฐ์„  ์ด ์™€์ผ๋“œ์นด๋“œ๋ฅผ ์–ด๋–ค ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ• ์ง€ ๊ฒฐ์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ์™€์ผ๋“œ ์นด๋“œ๋Š” ( ํ˜น์€ ) ํ˜น์€ ๋นˆ์นธ ์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ˜„์žฌ ๊ด„ํ˜ธ ์Šคํƒ์„ ๊ฐ€์ง€๊ณ ๋Š” ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผํ• ์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด๋‹น ์™€์ผ๋“œ ์นด๋“œ๋Š” ๋‹ค์Œ ์„ธ ๊ฐ€์ง€ ๊ฒฝ์šฐ๋กœ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * ๋ณด๋‹ค ์•ž์„œ ๋ฐœ๊ฒฌ๋œ ( ๋ฌธ์ž์˜ ) ์—ญํ•  * ๋ณด๋‹ค ๋Šฆ๊ฒŒ ๋ฐœ๊ฒฌ๋œ ) ๋ฌธ์ž์˜ ( ์—ญํ•  ์•„๋ฌด ์—ญํ• ๋„ ํ•˜์ง€ ์•Š๋Š” ๋นˆ์นธ ๋‹ค์‹œ ๋งํ•ด ) ๋ฌธ์ž์— ๋Œ€์‘๋˜๋Š” ( ๊ฐ€ ์ด์ „์— ์Šคํƒ์— ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ * ๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ.. 2021. 3. 2.
LeetCode 1094 - Car Pooling (Medium) ๋ฌธ์ œ LeetCode - 1094๋ฒˆ ํ’€์ด ๊ณผ์ • ๋ฌธ์ œ ๋ถ„๋ฅ˜๋Š” ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด์ง€๋งŒ ์ž…๋ ฅ ๊ฐ’์˜ ๋ฒ”์œ„๊ฐ€ ํฌ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ฃจํŠธ ํฌ์Šค ๋กœ๋„ ์ถฉ๋ถ„ํžˆ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ฐพ์•„์•ผ ํ•˜๋Š” ๊ฒƒ์€ ํ•œ ์‹œ์ ์— ํ•„์š”ํ•œ ์ตœ๋Œ€ capacity ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹œ๊ฐ„์„ 0.5 ๋‹จ์œ„๋กœ ์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ ๊ฒน์น˜๋Š” ์ตœ๋Œ€ ๊ตฌ๊ฐ„์„ ์ฐพ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ 0.5์”ฉ ์ฆ๊ฐ€์‹œ์ผœ์ค€ ์ด์œ ๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ 1 ๋‹จ์œ„์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. (์ €์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ˜„ํ•œ ๋ถ„์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ˆ ์‹œ์ž‘ ์ง€์ ์„ ํฌํ•จํ•˜๊ณ  ์ข…๋ฃŒ ์‹œ๊ฐ„์„ ์ œ์™ธํ•˜์—ฌ 1์”ฉ ์ฆ๊ฐ€์‹œ์ผœ๋„ ๋˜๋„๋ก ๊ตฌํ˜„ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์—ˆ๋Š”๋ฐ ๊ทธ๊ฒŒ ๋” ๊ฐ„๋‹จํ•ด๋ณด์ž…๋‹ˆ๋‹ค.) ์ฝ”๋“œ /** * @param {number[][]} trips * @param {number} capacity * @return {boolean} */ var car.. 2021. 3. 2.
LeetCode 49 - Group Anagrams (Medium) ๋ฌธ์ œ LeetCode - 49๋ฒˆ ํ’€์ด ๊ณผ์ • ์ฃผ์–ด์ง„ ์ž…๋ ฅ์—์„œ Anagram์„ ์ฐพ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. Anagram์€ ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ๋‘ ๋‹จ์–ด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฌธ์ž์˜ ์ข…๋ฅ˜์™€ ๊ฐœ์ˆ˜๊ฐ€ ๋™์ผํ•œ ๊ด€๊ณ„๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. Anagram์„ ํŒ๋‹จํ•˜๋Š” ์ง๊ด€์ ์ธ ๋ฐฉ๋ฒ•์€ ๋‘ ๋‹จ์–ด๋ฅผ ์ •๋ ฌํ•œ ๋’ค ๊ฐ™์€ ์ง€ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Javascript ์—์„œ String ์„ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” spread ์—ฐ์‚ฐ์„ ํ†ตํ•ด Array๋กœ ๋ฐ”๊ฟ”์ค€ ์ดํ›„ sort ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * @param {string[]} strs * @return {string[][]} */ var groupAnagrams = function (strs) { const anagram = new Map(); for (let word of strs) { let sorted = [... 2021. 3. 2.
LeetCode 200 - Number of Islands (Medium) ๋ฌธ์ œ LeetCode - 200๋ฒˆ ํ’€์ด ๊ณผ์ • ์„ฌ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์–ด์ฃผ๋Š” DFS ํƒ์ƒ‰ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ์ด์ง€๋งŒ ํžˆ๋“  ์ผ€์ด์Šค ๋•Œ๋ฌธ์— ์กฐ๊ธˆ ํ—ค๋งธ์Šต๋‹ˆ๋‹ค. LeetCode ๋ฌธ์ œ๋Š” ๊น”๋”ํ•˜์ง€๋งŒ ์ž…๋ ฅ ์ œํ•œ ์‚ฌํ•ญ์ด ๋ช…์‹œ๋˜์–ด์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์–ด์„œ ๋‚œ๊ฐํ•œ ์ƒํ™ฉ์ด ์ข…์ข… ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. (์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” grid ๊ฐ€ ๋น„์–ด์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐ์„ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค..) ๋•Œ๋ฌธ์— ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ๋Š” ์—ฌ๋Ÿฌ edge case ๋ฅผ ๊ณ ๋ คํ•˜๋Š” ์—ฐ์Šต์ด ํ•„์š”ํ•ด๋ณด์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * @param {character[][]} grid * @return {number} */ var numIslands = function (grid) { const dx = [0, 0, 1, -1]; const dy = [1, -1, 0, 0]; if (.. 2021. 3. 2.
LeetCode 64 - Minimum Path Sum (Medium) ๋ฌธ์ œ LeetCode - 64๋ฒˆ ํ’€์ด ๊ณผ์ • ์ด๋™ ๋ฐฉํ–ฅ์ด ๊ณ ์ •๋˜์–ด ์žˆ๋Š” ์ƒํƒœ์—์„œ ๋ชฉํ‘œ ์ง€์ ์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์†Œ ๋น„์šฉ์„ ์ฐพ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๊ฐ ์นธ์„ ํ•˜๋‚˜์˜ ์ •์ ์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉด ์ด๋™ ๋ฐฉํ–ฅ์ด ์˜ค๋ฅธ์ชฝ ํ˜น์€ ์•„๋ž˜๋กœ ๊ณ ์ •๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฅผ ๊ทธ๋ž˜ํ”„๋กœ ๋ชจ๋ธ๋งํ•˜์—ฌ ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‚˜ ํ”Œ๋กœ์ด๋“œ์™€ ๊ฐ™์€ ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๊ฒŒ ๋™์  ๊ณ„ํš๋ฒ• ์„ ํ™œ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ dp(x, y) = (x, y)์—์„œ ์ถœ๋ฐœํ•ด์„œ (m, n)์— ๋„๋‹ฌ ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋‹จ๊ฒฝ๋กœ ๋ผ๊ณ  ์ •์˜ํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ํ™”์‹์„ ์„ธ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. dp(x, y) = min(dp(x+1, y), dp(x, y+1)) + cost(x, y), ์ด๋•Œ cost๋Š” ํ˜„์žฌ (x, y) ์—์„œ ํ•„์š”ํ•œ ๋น„์šฉ ํ‰.. 2021. 3. 2.