1. ๋ฌธ์
2. ์ ์ถ๋ ฅ
3. ์ ์ถ๋ ฅ ์์
4. ๋ฌธ์ ์ค๊ณ
- ์ฐ์ํ์ฌ 3๊ฐ์ ์นด๋๋ฅผ ๊ฐ์ ธ๊ฐ ์ ์์ผ๋ฏ๋ก, ์นด๋๋ฅผ ๊ฐ์ ธ๊ฐ๋ ๊ฒฝ์ฐ๋ 3๊ฐ์ง๋ก ๋๋จ
- 1. ํ์ฌ ์นด๋๋ฅผ ๊ฐ์ ธ๊ฐ์ง ์๋ ๊ฒฝ์ฐ
- 2. ํ์ฌ ์นด๋๋ฅผ ๊ฐ์ ธ๊ฐ๊ณ ์ด์ ์นด๋๋ฅผ ๊ฐ์ ธ๊ฐ์ง ์๋ ๊ฒฝ์ฐ
- 3. ํ์ฌ ์นด๋๋ฅผ ๊ฐ์ ธ๊ฐ๊ณ ์ด์ ์นด๋๋ ๊ฐ์ ธ๊ฐ๋ ๊ฒฝ์ฐ
- ์ 3๊ฐ์ง ๊ฒฝ์ฐ์ ๋ํ ์ต๋๊ฐ์ ๊ฐ๊ฐ ์ ์ฅํด๋๊ณ ์ต์ข ์ ์ผ๋ก 3๊ฐ์ง ๊ฒฝ์ฐ ์ค ์ต๋๊ฐ์ ์ฐพ์์ผ๋ก์จ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ผ๋ฉฐ, ๋์ ๊ณํ๋ฒ์ ์ฌ์ฉํ ์๊ณ ๋ฆฌ์ฆ
- ํ์ฌ ์นด๋๋ฅผ ๊ฐ์ ธ๊ฐ์ง ์๋ ๊ฒฝ์ฐ์๋ ์ด์ ์นด๋์ ๋ํ ์ 3๊ฐ์ง ๊ฒฝ์ฐ ์ค ์ต๋๊ฐ์ ์ ์ฅํด์ผํจ
- ํ์ฌ ์นด๋๋ฅผ ๊ฐ์ ธ๊ฐ๊ณ ์ด์ ์นด๋๋ฅผ ๊ฐ์ ธ๊ฐ์ง ์๋ ๊ฒฝ์ฐ๋ ํ์ฌ ์นด๋์ ๊ฐ์ ์ด์ ์นด๋๋ฅผ ๊ฐ์ ธ๊ฐ์ง ์์์ ๋์ ๊ฐ์ ์ ์ฅ
- ํ์ฌ ์นด๋์ ์ด์ ์นด๋๋ฅผ ๋ชจ๋ ๊ฐ์ ธ๊ฐ๋ ๊ฒฝ์ฐ๋ ํ์ฌ ์นด๋์ ๊ฐ์ ์ด์ ์นด๋๋ง ๊ฐ์ ธ๊ฐ์ ๋์ ๊ฐ์ ์ ์ฅ
- ์ ๊ณผ์ ์ N๊ฐ์ ์นด๋์ ๋ํด ๋ฐ๋ณตํ ํ 3๊ฐ์ง ๊ฒฝ์ฐ์ ๋ํด ์ต๋๊ฐ์ ๊ตฌํจ์ผ๋ก์จ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํจ
5. ์ ์ฒด ์ฝ๋
//MARK: - ์นด๋ ๋์ด
//MARK: - Framework
import Foundation
//MARK: - Function
func getMax(_ array: [Int]) -> Int {
var result: Int = 0
for number in array {
result = result < number ? number : result
}
return result
}
func solution() -> Void {
//MARK: - Input
guard let N: Int = Int(readLine() ?? "0") else { return }
guard let inputArray: [String] = readLine()?.components(separatedBy: " ") else { return }
let baseCondition: Int = 3
var result: Int = 0
let cards: [Int] = inputArray.map { Int($0) ?? 0 }
var cases: [Int] = Array(repeating: 0, count: baseCondition)
//MARK: - Process
//1. ๋ถ๋ถ ๋ฌธ์ ๋ฅผ ์ ์ํ๋ค.
//max(T[0], T[1], T[2]) = ์ฃผ์ด์ง ์นด๋์์ ์ฐ์ํด์ ์ต๋ 2์ฅ์ฉ ๋ฝ์์ ๋, ์ต๋๊ฐ
//2. ์ ํ์์ ์ธ์ด๋ค.
//T[0] = i๋ฒ์งธ ์นด๋๋ฅผ ๋ฝ์ง ์์ ๊ฒฝ์ฐ, ์ด์ ๊ฒฝ์ฐ์์ ์ต๋๊ฐ
//T[1] = i๋ฒ์งธ ์นด๋๋ง ๋ฝ์ ๊ฒฝ์ฐ
//T[2] = i๋ฒ์งธ ์นด๋ + i - 1๋ฒ์งธ ์นด๋ ๋์ฅ์ ๋ฝ์ ๊ฒฝ์ฐ
//max(T[0], T[1], T[2])
cases[0] = 0
cases[1] = cards[0]
cases[2] = cases[0] + cards[0]
for i in 1..<N {
let choiceNoting, choiceOne, choiceTwo: Int
choiceNoting = getMax(cases)
choiceOne = cards[i] + cases[0]
choiceTwo = cards[i] + cases[1]
cases[0] = choiceNoting
cases[1] = choiceOne
cases[2] = choiceTwo
}
result = getMax(cases)
//MARK: - Output
print(result)
}
solution()
์ ์ฒด์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธํ ์ ์์ต๋๋ค.
'Swift Data Structure And Algorithm > Dynamic Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ง์ฌ๊ฐํ๋ฐฐ์น์๊ฒฝ์ฐ์์ (0) | 2022.04.08 |
---|---|
๋ฒํผ ๋๋ฅด๊ธฐ (0) | 2022.04.08 |
๊ตฌ์ฌ ๊ฒ์ (0) | 2022.04.08 |
์ง์ฌ๊ฐํ์ ํฉ (0) | 2022.04.08 |
์ซ์ ๋ง๋ค๊ธฐ (0) | 2022.04.08 |