Greedy
1. Greedy Algorithm ์ด๋?
Greedy Algorithm(ํ์ ์๊ณ ๋ฆฌ์ฆ) ์ "ํ์ฌ ์ํฉ์์ ๊ฐ์ฅ ์ข์๋ณด์ด๋(์ต์ ์) ์ ํ์ ๋ฐ๋ณตํด์ ์ ์ฒด ์ต์ ํด์ ๋๋ฌํ๋ ค๋ ์ ๋ต" ์.
๋งค ๋จ๊ณ์์ ๋ก์ปฌ ์ต์ (local optimum) ์ ์ ํํ์ง๋ง, ์ด ์ ํ์ด ์ ์ฒด์ ์ผ๋ก๋ ๊ธ๋ก๋ฒ ์ต์ (global optimum) ์ด ๋ ์ ์์ด์ผ ํจ.
๋ณดํต ๊ทธ๋ฆฌ๋๋ DP ๋ณด๋ค ๋น ๋ฅด๊ณ ๊ฐ๋จํ์ง๋ง, ํญ์ ์ ๋ต์ ๋ณด์ฅํ์ง๋ ์์
2. Greedy ๊ฐ ์ ์๋ํ๋ ์กฐ๊ฑด
1. ํ์์ ์ ํ ์์ฑ(Greedy Choice Property)
์์ ์ ํ์ด ์ดํ์ ์ ํ์ ์ํฅ์ ์ฃผ์ง ์์์ผ ํจ
์ฆ, "์ง๊ธ ์ด ์๊ฐ ๊ฐ์ฅ ์ข์ ์ ํ์ ํ๋ฉด, ์ ์ฒต์ ์ผ๋ก ์ต์ ์ด๋ค" ๋ ๊ฒ์ ์ฆ๋ช ํ ์ ์์ด์ผ ํจ.
2. ์ต์ ๋ถ๋ถ ๊ตฌ์กฐ(Optimal Substructure)
DP ์ ๋์ผ. ๋ฌธ์ ์ ์ ์ฒด ์ต์ ํด๊ฐ ํ์ ๋ฌธ์ ๋ค์ ์ต์ ํด๋ก ๊ตฌ์ฑ๋์ด์ผ ํจ.
์ด ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฌธ์ ๋ง ๊ทธ๋ฆฌ๋๋ก ํ ์ ์์
๋ง์กฑํ์ง ์์ผ๋ฉด DP ๋ ์์ ํ์(Brute Force) ์ ์จ์ผํจ.
3. ๋ํ์ ์ธ Greedy ์๊ณ ๋ฆฌ์ฆ ์์
๋์ ๊ฑฐ์ค๋ฆ๋
ํฐ ๋จ์ ๋์ ๋ถํฐ ์ต๋ํ ์ฌ์ฉ
ํ์์ค ๋ฐฐ์
์ข ๋ฃ ์๊ฐ์ด ๊ฐ์ฅ ๋น ๋ฅธ ํ์๋ถํฐ ์ ํ
๋ฐฐ๋ญ ๋ฌธ์ (๋ถํ ํ์ฉ ์)
๋ฌด๊ฒ ๋๋น ๊ฐ์น๊ฐ ๋์ ๋ฌผ๊ฑด๋ถํฐ ์ ํ
์ต์ ์คํจ๋ ํธ๋ฆฌ
Kruskal, Prim ์๊ณ ๋ฆฌ์ฆ
Huffman Coding
๋น๋ ๋ฎ์ ๋ฌธ์๋ถํฐ ๋ณํฉ
ํ๋ ์ ํ ๋ฌธ์
ํ๋ ์ข ๋ฃ ์๊ฐ์ด ๋น ๋ฅธ ์์ผ๋ก ์ ํ
4. ์์ : ๋์ ๊ฑฐ์ค๋ฆ๋ ๋ฌธ์
๋ฌธ์
๊ฑฐ์ค๋ฆ๋์ ์ค ๋ ๋์ ๊ฐ์๊ฐ ์ต์๊ฐ ๋๋๋ก ์ฃผ๋ ๋ฐฉ๋ฒ์ ๊ตฌํ์์ค.
๋์ ๋จ์ : 500์, 100์, 50์, 10์
์ : 1260์์ ๊ฑฐ์ฌ๋ฌ ์ค์ผ ํ๋ค๋ฉด?
ํ์ด
๊ฐ์ฅ ํฐ ๋จ์๋ถํฐ ์ต๋ํ ์ฌ์ฉ โ ๊ทธ๊ฒ ํ์ฌ ์ต์ ์ ์ ํ
500์๋ถํฐ ๋๋์ด๊ฐ๋ฉฐ ๋ชซ๊ณผ ๋๋จธ์ง๋ฅผ ๊ตฌํจ.
int[] coins = {500, 100, 50, 10};
int n = 1260;
int count = 0;
for(int coin : coins) {
count += n / coin; // ์ฌ์ฉํ ์ ์๋ ์ต๋ ๊ฐ์
n %= coin; // ๋จ์ ๊ธ์ก
}
System.out.println(count); // result : 6
500 * 2 + 100 * 2 + 50 * 1 + 10 * 1 = 1260 โ ์ด 6๊ฐ
์ ๋ฌธ์ ๋ ๊ทธ๋ฆฌ๋๊ฐ ํญ์ ์ต์ ์ธ ์ด์ : ๋์ ๋จ์๊ฐ "๋ฐฐ์ ๊ด๊ณ" ๋ก ๋์ด ์๊ธฐ ๋๋ฌธ.
5. Greedy vs DP
์ ๋ต
ํ์ฌ ์ต์ ์ ํ
๋ชจ๋ ๊ฒฝ์ฐ ๊ณ ๋ ค
์๊ฐ๋ณต์ก๋
๋ณดํต ๋ ๋น ๋ฆ (O(N log N))
๋ณดํต ๋๋ฆผ (O(Nยฒ), O(NM) ๋ฑ)
์กฐ๊ฑด
ํ์์ ์ ํ ์์ฑ, ์ต์ ๋ถ๋ถ ๊ตฌ์กฐ
์ค๋ณต ๋ถ๋ถ ๋ฌธ์ , ์ต์ ๋ถ๋ถ ๊ตฌ์กฐ
๊ตฌํ
๊ฐ๋จํ ํธ
๋ณต์กํ๊ณ ๋ฉ๋ชจ๋ฆฌ๋ ํ์
์ ๋ต ๋ณด์ฅ
์กฐ๊ฑด ๋ง์กฑ ์๋ง ๋ณด์ฅ
ํญ์ ๋ณด์ฅ๋จ
6. ์ค์ ์์ Greedy ์ ์ฉ ํ
์ ๋ ฌ์ด ๊ฑฐ์ ํ์ - ์ด๋ค ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ ํ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌ
"ํ์ฌ ์๊ฐ ์ต์ " ์ด ์ ์ฒด ์ต์ ์ด ๋๋์ง ์ง๊ด + ์ํ์ ์ผ๋ก ๊ฒ์ฆ
๊ทธ๋ฆฌ๋๋ก ํ๋ ธ๋ค๊ณ ํ์ ์ด ์ ๋๋ฉด, ๋ฐ๋ก ํ ์คํธ ํด๋ณด์
๊ทธ๋ฆฌ๋๊ฐ ์ ๋จนํ๋ค ์ถ์ผ๋ฉด DP/์์ ํ์์ผ๋ก ๋ฐฉํฅ ์ ํ
Last updated
Was this helpful?