๋ฌธ์ ์ค๋ช
์ฝ๊ฒ ๋งํด ํ ์คํฐ์ปค๋ฅผ ๋ฏ์ผ๋ฉด ์ ์์ ์คํฐ์ปค๋ ์ฌ์ฉํ์ง ๋ชปํ๋ค.
ํต์ฌ์ ์คํฐ์ปค๋ฅผ ๋ผ์ด๋ด ์ต๋ ์ซ์๋ฅผ ๊ตฌํ๋ ๊ฒ!
ํ์ด
์ dp์ธ๊ฐ?
์ด ๋ฌธ์ ๋ฅผ ๋ณด์๋ง์ dp๋ก ํ์ด์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
๊ทผ๋ฐ ๊ฐ๋ง ์จ๊ฑฐ์ง ์ ๋ด๊ฐ dp๋ก ํ๊ฒ ๋ค๊ณ ์๊ฐํ๋์ง..? ์ ํํ ์ ์ ๋ด๋ฆฌ๊ธฐ ์ด๋ ค์ ๋ค.
๊ทธ๋์ ์ด๋ฒ ๊ธฐํ์ dp ๋ฌธ์ ๊ตฌ๋ถ๋ฒ์ ์ ์ํด๋ด
1. ์ ๋ง์ ๊ฒฝ์ฐ์ ์๊ฐ ์๋๊ฐ? -> ์คํฐ์ปค๋ฅผ ๋ฏ๋ ๊ฒฝ์ฐ์ ์๊ฐ ๋งค์ฐ ๋ง์
2. ๊ฒฝ์ฐ์ ์์ค์ ๋ญ๊ฐ ๋ฐ๋ณต์ ์ธ ์ฐ์ฐ์ ๊ณ์ ํ๋๊ฐ? -> ์คํฐ์ปค ๋ฌธ์ ์ ์์์์ 14+11๊ฐ์ด ๊ณ์ ๋ฐ๋ณต์ ์ธ ์ฐ์ฐ์ ํ๋ค
์์ 2๊ฐ์ง๋ฅผ ๋ง์กฑํ๋ฉด dp๋ฌธ์ ๋ผ๊ณ ํ๋จ์ ๋ด๋ ธ๋ค. (์์ธํ ์ค๋ช ์ ๋งํฌ ์ฐธ๊ณ )
ํ์ด
์ด ๋ฌธ์ ๋ dp๋ฅผ ๋๊ฐ์ง ๊ฒฝ์ฐ๋ก ๋๋์ด์ผ ํ๋ค. (์ด๋ถ๋ถ์ ์๊ฐํด๋ด์ง ๋ชปํด ํํธ๋ฅผ ๋ณด์๋ค.)
1. ์ฒซ๋ฒ์งธ ์คํฐ์ปค๋ฅผ ๋ ๊ฒฝ์ฐ -> ๋๋ฒ์งธ ์คํฐ์ปค๋ ์ฌ์ฉํ์ง ๋ชปํจ, dp[0] = sticker[0], dp[1] = sticker[0]
2. ์ฒซ๋ฒ์งธ ์คํฐ์ปค๋ฅผ ๋ผ์ง ์์ ๊ฒฝ์ฐ -> dp[0] = 0, dp[1] = sticker[1]
์์ ๊ฐ์ด ๋๊ฐ์ง ์ผ์ด์ค๋ก dp1, dp2๋ฅผ ๋๋์ด์ ํ์๋ค.
๊ทธ๋ฆฌ๊ณ ํ์ฌ ์คํฐ์ปค๋ฅผ ๋ผ์ผ ํ ์ง ๋ง์์ผํ ์ง ๋ฐ๋ก ํ๋จํด์ผ ํ๋ค.
1. dp[i-2]+sticker[i] -> ํ์ฌ ์คํฐ์ปค๋ฅผ ๋๋ค.
2. dp[i-1] -> ํ์ฌ ์คํฐ์ปค๋ฅผ ๋ผ์ง ์๋๋ค.
๋ ์ค ๋ฌด์์ด ๋ ํฐ์ง ํ๋จํ๋
dp2[i] = max(dp2[i-2]+sticker[i], dp2[i-1])
dp[i]๋ฅผ ๊ตฌํ๋ ์ฝ๋์ด๋ค.
์ ์ฒด ์ฝ๋
func solution(_ sticker:[Int]) -> Int {
// ์คํฐ์ปค์ ๊ฐ์๊ฐ 1๊ฐ๋ 2๊ฐ๋ฉด ํฐ ์ ๋ฆฌํด
if sticker.count < 3 {
return sticker.max()!
}
// ์ฒซ ๋ฒ์งธ ์คํฐ์ปค๋ฅผ ๋ผ์์ ๊ฒฝ์ฐ
var dp1 = Array(repeating: 0, count: sticker.count)
dp1[0] = sticker[0]
dp1[1] = sticker[0]
// ์ฒซ๋ฒ์งธ ์คํฐ์ปค๋ฅผ ๋ด์ง ์์์ ๊ฒฝ์ฐ
var dp2 = Array(repeating: 0, count: sticker.count)
dp2[0] = 0
dp2[1] = sticker[1]
for i in 2..<sticker.count {
// ๋งจ ๋ง์ง๋ง ์คํฐ์ปค์ธ ๊ฒฝ์ฐ
if i == sticker.count - 1 {
dp2[i] = max(dp2[i-2]+sticker[i], dp2[i-1])
} else {
dp1[i] = max(dp1[i-2]+sticker[i], dp1[i-1])
dp2[i] = max(dp2[i-2]+sticker[i], dp2[i-1])
}
}
return max(dp1.max()!, dp2.max()!)
}
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 1743] swift ์์๋ฌผ ํผํ๊ธฐ: DFS (0) | 2023.04.05 |
---|---|
[๋ฐฑ์ค 1654] swift ๋์ ์๋ฅด๊ธฐ (0) | 2023.03.29 |
[ํ๋ก๊ทธ๋๋จธ์ค] 3์ฐจ ์์ถ swift (0) | 2023.03.22 |
[๋ฐฑ์ค 9935] swift ๋ฌธ์์ด ํญ๋ฐ (1) | 2023.03.21 |
[ํ๋ก๊ทธ๋๋จธ์ค] swift ์ง๊ฒ๋ค๋ฆฌ ๊ฑด๋๊ธฐ (0) | 2023.03.02 |