2์ 25์ผ (๊ธ)
- Greedy Algorithm
- ์ฝ๋ฉํ ์คํธ ํ์ด ์ค ๋ณํ ๊ฟํ~
ย
[Greedy Algorithm]
์ด๋ฒ์ฃผ์ฐจ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๊ฐ ๊ทธ๋ฆฌ๋์ธ๋ฐ... ๊ณต๋ถ๊ฐ ํ์ํ ๊ฒ ๊ฐ์์....
- Greedy๋ 'ํ์์ค๋ฌ์ด, ์์ฌ๋ง์'์ด๋ ๋ป์ด๋ค.
- ๋ง ๊ทธ๋๋ก ์ ํ์ ์๊ฐ๋ง๋ค ๋น์ฅ ๋์์ ๋ณด์ด๋ ์ต์ ์ ์ํฉ๋ง์ ์ซ์ ์ต์ข ์ ์ธ ํด๋ต์ ๋๋ฌํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ์ต์ ํด๋ฅผ ๊ตฌํ๋๋ฐ์ ์ฌ์ฉ๋๋ ๊ทผ์ฌ์ ์ธ ๋ฐฉ๋ฒ
- ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ๋ฌ ๊ฒฝ์ฐ ์ค ํ๋๋ฅผ ๊ฒฐ์ ํด์ผ ํ ๋๋ง๋ค ๊ทธ ์๊ฐ์ ์ต์ ์ด๋ผ๊ณ ์๊ฐ๋๋ ๊ฒ์ ์ ํํด ๋๊ฐ๋ ๋ฐฉ์์ผ๋ก ์งํํ์ฌ ์ต์ข ์ ์ธ ํด๋ต์ ๋๋ฌํ๋ค.
- ์๊ฐ๋ง๋ค ํ๋ ์ ํ์ ๊ทธ ์๊ฐ์ ๋ํด ์ง์ญ์ ์ผ๋ก๋ ์ต์ ์ด์ง๋ง, ๊ทธ ์ ํ๋ค์ ๊ณ์ ์์งํ์ฌ ์ต์ข ์ ์ธ ํด๋ต์ ๋ง๋ค์๋ค๊ณ ํด์, ๊ทธ๊ฒ์ด ์ต์ ์ด๋ผ๋ ๋ณด์ฅ์ด ์๋ค.
- ํ์ง๋ง ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ ์ ์๋ ๋ฌธ์ ๋ค์ ์ง์ญ์ ์ผ๋ก ์ต์ ์ด๋ฉด์ ์ ์ญ์ ์ผ๋ก ์ต์ ์ธ ๋ฌธ์ ๋ค์ด๋ค.
์ ํ ์ ์ฐจ(Selection Procedure)
- ํ์ฌ ์ํ์์์ ์ต์ ์ ํด๋ต์ ์ ํ
์ ์ ์ฑ ๊ฒ์ฌ(Feasibility Check)
- ์ ํ๋ ํด๊ฐ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง ๊ฒ์ฌ
ํด๋ต ๊ฒ์ฌ(Solution Check)
- ์๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์๋์ง ๊ฒ์ฌํ๊ณ , ํด๊ฒฐ๋์ง ์์๋ค๋ฉด ์ ํ์ ์ฐจ๋ก ๋์๊ฐ ์์ ๊ณผ์ ์ ๋ฐ๋ณต
- ํ์ ์๊ณ ๋ฆฌ์ฆ์ด ์ ์๋ํ๋ ๋ฌธ์ ๋ ๋๋ถ๋ถ ํ์์ค๋ฐ ์ ํ ์กฐ๊ฑด(greedy choice property)๊ณผ ์ต์ ๋ถ๋ถ ๊ตฌ์กฐ ์กฐ๊ฑด(Optimal Substructure) ์ด๋ผ๋ ๋๊ฐ์ง ์กฐ๊ฑด์ด ๋ง์กฑ๋๋ค.
- ํ์์ค๋ฐ ์ ํ ์กฐ๊ฑด์ ์์ ์ ํ์ด ์ดํ์ ์ ํ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค๋ ๊ฒ์ด๋ฉฐ, ์ต์ ๋ถ๋ถ ๊ตฌ์กฐ ์กฐ๊ฑด์ ๋ฌธ์ ์ ๋ํ ์ต์ ํด๊ฐ ๋ถ๋ถ ๋ฌธ์ ์ ๋ํด์๋ ์ญ์ ์ต์ ํด๋ผ๋ ๊ฒ์ด๋ค.
ํ์์ ์ ํ ์์ฑ(Greedy Choice Property)
- ์์ ์ ํ์ด ์ดํ์ ์ ํ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
์ต์ ๋ถ๋ถ ๊ตฌ์กฐ(Optimal Substructure)
- ๋ฌธ์ ์ ๋ํ ์ต์ข ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ถ๋ถ ๋ฌธ์ ์ ๋ํ ์ต์ ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
- ์ด๋ฌํ ์กฐ๊ฑด์ด ์ฑ๋ฆฝํ์ง ์๋ ๊ฒฝ์ฐ์๋ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ต์ ํด๋ฅผ ๊ตฌํ์ง ๋ชปํ๋ค.
- ํ์ง๋ง ์ด๋ฌํ ๊ฒฝ์ฐ์๋ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ทผ์ฌ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํ ์ ์์ผ๋ฉฐ, ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๊ณ์ฐ ์๋๊ฐ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ ์ค์ฉ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
- ์ด ๊ฒฝ์ฐ ์ญ์ ์ด๋ ์ ๋๊น์ง ์ต์ ํด์ ๊ฐ๊น์ด ํด๋ฅผ ๊ตฌํ ์ ์๋ ์ง๋ฅผ ๋ณด์ฅํ๋ ค๋ฉด ์๋ฐํ ์ฆ๋ช ์ด ํ์ํ๋ค.
- ์ด๋ค ํน๋ณํ ๊ตฌ์กฐ๊ฐ ์๋ ๋ฌธ์ ์ ๋ํด์๋ ํ์ ์๊ณ ๋ฆฌ์ฆ์ด ์ธ์ ๋ ์ต์ ํด๋ฅผ ์ฐพ์๋ผ ์ ์๋ค.
- ์ด ๊ตฌ์กฐ๋ฅผ
๋งคํธ๋ก์ด๋
๋ผ ํ๋ค. - ๋งคํธ๋ก์ด๋๋ ๋ชจ๋ ๋ฌธ์ ์์ ๋ํ๋๋ ๊ฒ์ ์๋๋, ์ฌ๋ฌ ๊ณณ์์ ๋ฐ๊ฒฌ๋๊ธฐ ๋๋ฌธ์ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉ๋๋ฅผ ๋์ฌ์ค๋ค.
ํ์ ์๊ณ ๋ฆฌ์ฆ์ ํญ์ ์ต์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ๋ ๊ฒ์ ์๋์ง๋ง, ์ด๋์ ๋ ์ต์ ์ ๊ทผ์ฌํ ๊ฐ์ ๋น ๋ฅด๊ฒ ๋์ถํ ์ ์๋ ์ฅ์ ์ด ์๋ค. ์ด ์ฅ์ ์ผ๋ก ์ธํด ํ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ทผ์ฌ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํด๋ ์ธ์ ๋ ์ต์ ํด๋ฅผ ๊ตฌํ ์ ์๋ ๋ฌธ์ (๋งคํธ๋ก์ด๋)๊ฐ ์๊ณ , ์ด๋ฌํ ๋ฌธ์ ์ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด์ ๋น ๋ฅธ ๊ณ์ฐ ์๋๋ก ๋ต์ ๊ตฌํ ์ ์๋ค. ๊ทธ๋์ ์ค์ฉ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
[์๊ณ ๋ฆฌ์ฆ ๊ฟํ]
https://developer.apple.com/documentation/swift/character/3127025-wholenumbervalue https://developer.apple.com/documentation/swift/array/1687832-enumerated
// String to [Int]
let arr: [Int] = "12345".compactMap { $0.wholeNumberValue }
// ๋ฐฐ์ด ์์ ์ธ๋ฑ์ค ๊ตฌํ๊ธฐ enumerated()
let withIndex = ["์ผ","์ด","์ผ","์ฌ","์ค"].enumerated().map { print($0.offset, $0.element)}
/*
0 ์ผ
1 ์ด
2 ์ผ
3 ์ฌ
4 ์ค
*/
// ์ด๊ฑด ๋ค์ ๋ณต๊ธฐ์ฉ. reduce๋ก [Int] to String
let str: String = [1,2,3,4,5].reduce("") { $0 + String($1) }