๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋?
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ(ํ์๋ฒ)์ด๋ ํ์ฌ ์ํฉ์์ ๊ฐ์ฅ ์ข์ ๊ฒ(์ต์ ์ ์ ํ)์ ๊ณ ๋ฅด๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ปํ๋ค.
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋์ ํ๋ก๊ทธ๋๋ฐ(DP)์ ๊ฐ๋จํ ๋ฌธ์ ํด๊ฒฐ์ ์ฌ์ฉํ๋ฉด ์ง๋์น๊ฒ ๋ง์ ์ผ์ ํ๋ค๋ ๊ฒ์ ์ฐฉ์ํด ๊ณ ์๋์๋ค.
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ํ์ฌ ์ํฉ์์ ๊ฐ์ฅ ์ข์ ๊ฒฐ๊ณผ๋ฅผ ์ ํํด ๋๊ฐ๋ ๋ฐฉ์์ ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ ๊ธฐ๋ฒ์ด๋ค.
ํ์ง๋ง ์ด ๊ฐ์ฅ ์ข์ ๊ฒฐ๊ณผ๋ ํญ์ ์ต์ข ์ ์ธ ๊ฒฐ๊ณผ ๋์ถ์ ๋ํ ์ต์ ํด๋ฅผ ๋ณด์ฅํด ์ฃผ๋ ๊ฒ์ ์๋๋ค.
์ ๊ทธ๋ฆผ์์ ๊ฐ์ฅ ํฐ ๊ฐ์ด ์ต์ ์ ๊ฐ์ผ ๋, ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ํ์ฌ ์ํฉ์์ ๊ฐ์ฅ ์ต์ ์ ๊ฐ์ ๊ตฌํ๊ธฐ ๋๋ฌธ์
์ต์ข ์ ์ธ ๋ต์ 23์ด ๋์ค๊ฒ ๋๋ค(์ต์ ์ ๊ฐ: 128).
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ํญ์ ์ต์ข ์ ์ธ ๊ฒฐ๊ณผ ๋์ถ์ ์ต์ ํด๋ฅผ ๋ณด์ฅํด ์ฃผ๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ํฉ์ ๋ง๊ฒ ์ฌ์ฉํด์ผ ํ๋ค.
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ํน์ง
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ค์๊ณผ ๊ฐ์ ํน์ฑ์ ๊ฐ์ง๋ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๋ ๋ฐ ๊ฐ์ ์ด ์๋ค.
ํ์ ์ ํ ์์ฑ(greedy choice property)
์ต์ ๋ถ๋ถ ๊ตฌ์กฐ(optimal substructure)
์ต์ ๋ถ๋ถ ๊ตฌ์กฐ๋ DP๋ก ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํ ์กฐ๊ฑด์ ์ธ๊ธ๋ ์ ์ด ์๋ค.
์ต์ ๋ถ๋ถ ๊ตฌ์กฐ์ ๋ํ ์ค๋ช ์ DP ํฌ์คํ ์ ์ ๋์ ์์ผ๋ฏ๋ก ์ฌ๊ธฐ์์ ์ธ๊ธํ์ง๋ ์๊ฒ ๋ค.
์ฌ๊ธฐ์ ํ์ ์ ํ ์์ฑ์ด ๋ฌด์์ธ์ง ๊ฐ๋จํ๊ฒ ์ค๋ช ํ์๋ฉด,
ํ์์ ์ธ ์ ํ์ ํญ์ ์์ ์ด ๋ณด์ฅ๋์ด์ผ ํ๋ค.
์ฌ๊ธฐ์ ์์ ํ๋ค๋ ๊ฒ์ ์ด ์ ํ์ผ๋ก ์ธํด ์ ์ฒด ๋ฌธ์ ์ ์ต์ ํด๋ฅผ ๋ฐ๋์ ๋์ถํ ์ ์๋ ๊ฒฝ์ฐ์ฌ์ผ ํ๋ค๋ ๋ป์ด๋ค.
๊ทธ๋ฆผ์ผ๋ก ๊ฐ๋จํ ์ค๋ช ํ์๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋๋ก๊ฐ ์๋ค.
์์ธ์์ ๋ถ์ฐ๊น์ง ์ต๋จ ๊ฒฝ๋ก๋ก ๊ฐ๊ณ ์ ํ ๋, ์ฐ๋ฆฌ๋ ํ์์ ์ธ ์ ํ์ผ๋ก ์ธํด ์์ธ์์ ๋๊ตฌ๋ก ๊ฐ๋ ๊ฐ์ฅ ์งง์ ๊ธธ์ธ 200km๋ฅผ ์ ํํ๋ค.
์ด ์ ํ์ผ๋ก ์ธํด ์ต์ข ์ ์ธ ๋ต์ ๋ ๊ฐ๊น์์ก์ผ๋ฉด ํ์ ์ ํ ์์ฑ์ ๋ง์กฑ์ผ๋ก ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ์ ์๋ค.
์ ์์๋ ์ต์ ๋ถ๋ถ ๊ตฌ์กฐ๋ ๋ง์กฑํ๋ ์์์ด๋ค.
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉํ๊ธฐ
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ ๋ฌธํ๊ธฐ ์ข์ ๋ฌธ์ ๋ฅผ ๋ช ๊ฐ ์๊ฐํ๊ฒ ๋ค.
(๋ฐฑ์ค) ๋์ 0, Silver 4
https://www.acmicpc.net/problem/11047
๋์ ์ ์ข ๋ฅ N๊ณผ ๋ง๋ค์ด์ผ ํ๋ ๊ธ์ก K๊ฐ ์ฃผ์ด์ง ๋, ์ ๊ฐ๊ฐ์ธ ๋์ ์ ๊ฐ์น A๊ฐ N๊ฐ๊ฐ ์ฃผ์ด์ง ๋, A๋ฅผ ์ฌ์ฉํด K๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ต์๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
๋์ ์ ๊ฐ์๋ฅผ ์ต์ํ์ผ๋ก ์ด์ฉํด K๋ฅผ ๊ตฌํด์ผ ํ๋๋ฐ ์์ ๋์ ๋ถํฐ ํฐ ๋์ ์์ผ๋ก ๊ตฌํ๋ ๋ฐฉ๋ฒ๊ณผ ํฐ ๋์ ๋ถํฐ ์์ ๋์ ์์ผ๋ก ๊ตฌํ๋ ๋ฐฉ๋ฒ 2๊ฐ์ง๊ฐ ์๋ค.
๊ฐ์ธ์ ์ผ๋ก ๋๋ ํฐ ๋์ ๋ถํฐ ์์ํด ์์ ๋์ ์์ผ๋ก ๊ตฌํ๋ ๊ฒ์ด ํธํ๋ค.
์๋ฅผ ๋ค์ด K๊ฐ 4790์ด๊ณ , A๊ฐ 1, 5, 10, 50, 100, 500, 1000, 5000์ด ์์ ๋, 4790์์ ๋ง๋ค๋ ค๋ฉด 1000์ 4๊ฐ, 500์ 1๊ฐ, 100์ 2๊ฐ, 50์ 1๊ฐ, 10์ 4๊ฐ๊ฐ ํ์ํ๋ฏ๋ก 4790์์ ๋ง๋๋ ์ต์๊ฐ์ 12๊ฐ์ด๋ค.
๋ง์ฝ ํด๊ฒฐํ์ง ๋ชปํ ๋ฌธ์ ๋ผ๋ฉด ์ ํํธ๋ฅผ ๋ณด๊ณ ๋ฌธ์ ๋ฅผ ์ ํด๊ฒฐํด ๋ณด๊ธธ ๋ฐ๋๋ค. ์ ๋ต ์ฝ๋๋ ์ฒจ๋ถํ์ง ์๊ฒ ๋ค.
์ ๋ฆฌ
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋ ์ ๊ฐ๋จํ ๊ณต๋ถํด ๋ณด์๋ค.
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ๋ DP์ฒ๋ผ ๋ง์ ๋ฌธ์ ๋ฅผ ํ์ด๋ด์ ์์ ์ด ๊ทธ๋ฆฌ๋๋ฅผ ์จ์ ํ์ด๋ ๋๋์ง ํ๋จํ๋ ๋ฅ๋ ฅ๊ณผ ๊ทธ๋ฆฌ๋๋ฅผ ์ด๋ป๊ฒ ํ์ฉํ ์ ์๋์ง ์๊ฐํ๋ ๋ฅ๋ ฅ์ ๊ธธ๋ฌ ๋ด์ผ๊ฒ ๋ค.
์ฐธ๊ณ ํ ๊ธ
ํ์๋ฒ(๊ทธ๋ฆฌ๋) ์๊ณ ๋ฆฌ์ฆ
ํ์๋ฒ(์ดํ '๊ทธ๋ฆฌ๋') ์๊ณ ๋ฆฌ์ฆ์ด๋ ํ์ฌ ์ํฉ์์ ๊ฐ์ฅ ์ข์ ๊ฒ(์ต์ ์ ์ ํ)์ ๊ณ ๋ฅด๋ ์๊ณ ๋ฆฌ์ฆ์ ๋งํฉ๋๋ค. ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋์ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ๋จํ ๋ฌธ์ ํด๊ฒฐ์ ์ฌ์ฉํ๋ฉด ์ง๋์น๊ฒ ๋ง
velog.io
https://namu.wiki/w/%EA%B7%B8%EB%A6%AC%EB%94%94%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ (์์ฌ์์ด ์๊ณ ๋ฆฌ์ฆ, Greedy Algorithm)์ด๋ "๋งค ์ ํ์์ ์ง๊ธ ์ด ์๊ฐ ๋น์ฅ ์ต์ ์ธ
namu.wiki
'๐ | Kotlin > ๐ค | ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ๋งค๋ด์ฒ ์๊ณ ๋ฆฌ์ฆ(Manacher) ๊ฐ๋ (0) | 2024.06.24 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ๊ทธ๋ํ ํ์ ์๊ณ ๋ฆฌ์ฆ(DFS, BFS) (0) | 2024.06.22 |
[์๊ณ ๋ฆฌ์ฆ] ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ(Dynamic Programming) (0) | 2024.06.12 |
[Kotlin] ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ ์๊ณ ๋ฆฌ์ฆ (0) | 2022.10.24 |
[Kotlin] ์ด์ง ํ์ ์๊ณ ๋ฆฌ์ฆ (0) | 2022.10.21 |