LeetCode 2099: Largest Sum Subsequence - Greedy and Heap/Nth_element Approach
๐ค AI ์ถ์ฒ
์ด ์ฝํ ์ธ ๋ LeetCode์ 'Find Subsequence of Length K With the Largest Sum' ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ํ๊ตฌํ๋ ๊ฐ๋ฐ์์๊ฒ ์ ์ฉํฉ๋๋ค. ํนํ, ์ต๋ ํฉ์ ๊ฐ์ง๋ ๋ถ๋ถ ์์ด์ ์ฐพ๋ ์๋ณธ ๋ฐฐ์ด์ ์๋์ ์์๋ฅผ ์ ์งํด์ผ ํ๋ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑ์ํค๊ธฐ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ์ ๊ทผ ๋ฐฉ์์ ๊ด์ฌ ์๋ ๊ฐ๋ฐ์์๊ฒ ์ถ์ฒํฉ๋๋ค. ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ํ ์ดํด๋๋ฅผ ๋์ด๊ณ ์ถ์ ์ฃผ๋์ด ๊ฐ๋ฐ์๋ถํฐ ๋ฏธ๋ค ๋ ๋ฒจ ๊ฐ๋ฐ์๊น์ง ๋ชจ๋์๊ฒ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
๐ ์ฃผ์ ํค์๋

ํต์ฌ ๊ธฐ์ : 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 ๊ฐ์์์ ์ค๋ณต ์์๋ฅผ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ์์ ๋ณต์ก์ฑ์ด ์ถ๊ฐ๋์ด ํฅ๋ฏธ๋ก์ด ๋ฌธ์ ๋ผ๊ณ ์ธ๊ธํ๋ฉฐ, ๊ฐ๋ฐ ์ปค๋ฎค๋ํฐ์์์ ํ์ต ๊ฐ์น๋ฅผ ๊ฐ์กฐํฉ๋๋ค.
ํค์ค๋งค๋: ์ ๋ฌธ์ ์ด๊ณ ๋ช ํํ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ ๊ทผ ๋ฐฉ์๊ณผ ๊ตฌํ ๋ํ ์ผ์ ํจ๊ณผ์ ์ผ๋ก ์ ๋ฌํฉ๋๋ค.