LeetCode 2099: Largest Sum Subsequence - Greedy and Heap/Nth_element Approach

๐Ÿค– AI ์ถ”์ฒœ

์ด ์ฝ˜ํ…์ธ ๋Š” LeetCode์˜ 'Find Subsequence of Length K With the Largest Sum' ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ํƒ๊ตฌํ•˜๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ, ์ตœ๋Œ€ ํ•ฉ์„ ๊ฐ€์ง€๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ์ฐพ๋˜ ์›๋ณธ ๋ฐฐ์—ด์˜ ์ƒ๋Œ€์  ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์  ์ ‘๊ทผ ๋ฐฉ์‹์— ๊ด€์‹ฌ ์žˆ๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•œ ์ดํ•ด๋„๋ฅผ ๋†’์ด๊ณ  ์‹ถ์€ ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž๋ถ€ํ„ฐ ๋ฏธ๋“ค ๋ ˆ๋ฒจ ๊ฐœ๋ฐœ์ž๊นŒ์ง€ ๋ชจ๋‘์—๊ฒŒ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๐Ÿ”– ์ฃผ์š” ํ‚ค์›Œ๋“œ

LeetCode 2099: Largest Sum Subsequence - Greedy and Heap/Nth_element Approach

ํ•ต์‹ฌ ๊ธฐ์ˆ : LeetCode 2099๋ฒˆ ๋ฌธ์ œ, '๊ธธ์ด K๋ฅผ ๊ฐ€์ง€๋ฉฐ ํ•ฉ์ด ๊ฐ€์žฅ ํฐ ๋ถ€๋ถ„ ์ˆ˜์—ด ์ฐพ๊ธฐ'๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ทธ๋ฆฌ๋””(Greedy) ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ nth_element ๋˜๋Š” ์ตœ์†Œ ํž™(min-heap)์„ ํ™œ์šฉํ•œ ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์ˆ ์  ์„ธ๋ถ€์‚ฌํ•ญ:
* ๋ฌธ์ œ ์ •์˜: ์ฃผ์–ด์ง„ ๋ฐฐ์—ด nums์—์„œ ํ•ฉ์ด ๊ฐ€์žฅ ํฐ ๊ธธ์ด k์ธ ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ์ฐพ๋˜, ์›๋ณธ ๋ฐฐ์—ด์˜ ์ƒ๋Œ€์  ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
* ํ•ต์‹ฌ ์•„์ด๋””์–ด: ๋‹จ์ˆœํžˆ ๊ฐ€์žฅ ํฐ k๊ฐœ์˜ ๊ฐ’์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ด ๊ฐ’๋“ค์˜ ์›๋ž˜ ์œ„์น˜๋ฅผ ์ถ”์ ํ•˜์—ฌ ์ˆœ์„œ๋ฅผ ๋ณด์กดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
* ํ•ด๊ฒฐ ์ „๋žต:
1. nth_element ๋˜๋Š” ์ตœ์†Œ ํž™์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์œ„ k๊ฐœ์˜ ๊ฐ’์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ๊ฐ’(threshold)์„ ์ฐพ์Šต๋‹ˆ๋‹ค.
2. ์›๋ณธ ๋ฐฐ์—ด์—์„œ threshold๋ณด๋‹ค ํฐ ๊ฐ’๋“ค์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๊ณ , threshold์™€ ๊ฐ™์€ ๊ฐ’์€ k์—์„œ ๊ทธ ๊ฐœ์ˆ˜๋ฅผ ๋บ€ ๋งŒํผ๋งŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
3. ์›๋ณธ ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ threshold๋ณด๋‹ค ํฐ ๊ฐ’์€ ๋ชจ๋‘ ํฌํ•จ์‹œํ‚ค๊ณ , threshold์™€ ๊ฐ™์€ ๊ฐ’์€ ๋‚จ์€ equal ์นด์šดํŠธ๋งŒํผ๋งŒ ๋ถ€๋ถ„ ์ˆ˜์—ด์— ์ถ”๊ฐ€ํ•˜์—ฌ ์ˆœ์„œ๋ฅผ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค.
* ์ฝ”๋“œ ์˜ˆ์ œ: C++, JavaScript, Python์„ ์‚ฌ์šฉํ•œ ์„ธ ๊ฐ€์ง€ ๊ตฌํ˜„ ๋ฐฉ์‹์„ ์ œ๊ณตํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์–ธ์–ด์—์„œ์˜ ์ ์šฉ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
* ์‹œ๊ฐ„ ๋ฐ ๊ณต๊ฐ„ ๋ณต์žก๋„: ์ตœ์ ์˜ ๊ฒฝ์šฐ O(n)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„์™€ O(n)์˜ ๊ณต๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ์ž„ํŒฉํŠธ: ์ด ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์ •๋ ฌ ๋ฐ ์„ ํƒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํšจ์œจ์ ์ธ ์‚ฌ์šฉ๋ฒ•, ๊ทธ๋ฆฌ๋”” ์ „๋žต์˜ ์ ์šฉ, ๊ทธ๋ฆฌ๊ณ  ์›๋ณธ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊นŠ์ด ์žˆ๋Š” ์ดํ•ด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์ค‘๋ณต ๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ฒ˜๋ฆฌ ๋กœ์ง์€ ์‹ค์ œ ๊ฐœ๋ฐœ์—์„œ๋„ ์œ ์šฉํ•˜๊ฒŒ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฐ˜์‘: ์ฝ˜ํ…์ธ ๋Š” ์ด ๋ฌธ์ œ๊ฐ€ '์‰ฌ์›€' ๋‚œ์ด๋„์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ํŠนํžˆ threshold ๊ฐ’์—์„œ์˜ ์ค‘๋ณต ์š”์†Œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ๋ณต์žก์„ฑ์ด ์ถ”๊ฐ€๋˜์–ด ํฅ๋ฏธ๋กœ์šด ๋ฌธ์ œ๋ผ๊ณ  ์–ธ๊ธ‰ํ•˜๋ฉฐ, ๊ฐœ๋ฐœ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ์˜ ํ•™์Šต ๊ฐ€์น˜๋ฅผ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค.

ํ†ค์•ค๋งค๋„ˆ: ์ „๋ฌธ์ ์ด๊ณ  ๋ช…ํ™•ํ•œ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์  ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ๊ตฌํ˜„ ๋””ํ…Œ์ผ์„ ํšจ๊ณผ์ ์œผ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“š ๊ด€๋ จ ์ž๋ฃŒ