Problem
Solution
ํด๋น ๋ฌธ์ ๋ DP(Dynamic Programming)์ผ๋ก ํ์ด์ผ ํ๋ ๋ฌธ์ ์ ๋๋ค.
1. ์คํฐ์ปค์ ๊ฐฏ์๊ฐ 3๊ฐ ์ดํ๋ผ๋ฉด ๊ฐ์ฅ ํฐ ์๋ฅผ ๋ฐํํ๋ค.
์คํฐ์ปค์ ๊ฐฏ์๊ฐ 3๊ฐ ์ดํ๋ผ๋ฉด ํ๋๋ฐ์ ๋ ์ ์์ผ๋ฏ๋ก ๊ฐ์ฅ ํฐ ์๋ฅผ ๋ฐํํฉ๋๋ค.
if sticker.count < 4 { return sticker.max()!}
2. ์ฒซ ๋ฒ์งธ ์คํฐ์ปค๋ฅผ ๋ฏ์ด๋์ ๊ฒฝ์ฐ์ ๋ ๋ฒ์งธ ์คํฐ์ปค๋ฅผ ๋ฏ์ด๋์ ๊ฒฝ์ฐ์ dp๋ฅผ ๋ง๋ค์ด์ค๋๋ค.
var dp1:[Int] = [sticker[0],sticker[0]]
var dp2:[Int] = [0,sticker[1]]
3. ์ด์ ์ ์์ธ ํฉ์ ์ด์ฉํด ๋ ์ข์ ์คํฐ์ปค๋ฅผ ๋ฏ์ด๋ ๋๋ค.
๋ ์ข์ ์คํฐ์ปค๋ฅผ ๋ฏ์ด๋ด๊ธฐ ์ํ ์์ max(dp[i-2] + sticker[i] ์ dp[i-1]) ์ ๋๋ค.
์ด์ ๋ ์คํฐ์ปค๋ฅผ ๋ฏ์ด๋ผ ์ ์๋ ์กฐ๊ฑด์ ํ์ฌ ์์น์์ 2์นธ ์ ์คํฐ์ปค์ 3์นธ ์ ์คํฐ์ปค์ ๋๋ค.
๋ง์ฝ [14, 6, 5, 11, 3, 9, 2, 10] ์ด๋ ๊ฒ ์๋ค๊ณ ๊ฐ์ ํ๊ณ 0๋ฒ์งธ ์คํฐ์ปค์ธ 14๋ฅผ ๋ฏ์ด๋์ ๋
2์นธ ์ ์คํฐ์ปค๋ 5์ 3์นธ ์ ์คํฐ์ปค๋ 11์ ๋๋ค.
5์ 11 ์ค ๋น์ฐํ 11์ด ์ข๋ค๊ณ ์๊ฐํ ์ ์์ง๋ง ๋ง์ฝ 11์์ 1000์ด๋ผ๋ ์ซ์๊ฐ ์์๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
11์ ๋ฏ์ด๋์ผ๋ก์จ 1000์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค.
๊ณ ๋ก 5๋ฅผ ๋ฏ์ด๋ด๊ณ ๊ทธ ๋ค์ 1000์ ๋ํ์ ๋์ 11์ ๋ฏ์ด๋ด๊ณ ๊ทธ ๋ค์ ์ซ์๋ฅผ ๋ฏ์ด๋์ ๋ ์ด๋ ๊ฒ 2์ ์์ ๋ด๋ค๋ด์ผ ํฉ๋๋ค.
๊ณ ๋ก ์์ ๊ฐ์ ์์ด ์ฑ๋ฆฝ๋๋ ๊ฒ์ด์ฃ .
for i in 2..<sticker.count {
dp1.append(max(dp1[i-2]+sticker[i],dp1[i-1]))
dp2.append(max(dp2[i-2]+sticker[i],dp2[i-1]))
}
4. ์ฒซ ๋ฒ์งธ ์คํฐ์ปค๋ฅผ ๋ฏ์ด๋์ ๋ ๊ฐ์ฅ ๋ง์ง๋ง ๊ฐ์ ์ญ์ ํด์ค๋ค.
์ฒซ ๋ฒ์งธ ์คํฐ์ปค๋ฅผ ๋ฏ์ด๋์ ๋ ๊ฐ์ฅ ๋ง์ง๋ง ์คํฐ์ปค๋ ๋ฏ์ด์ง๋ฏ๋ก ๋ง์ง๋ง ๊ฐ์ ์ญ์ ํด์ค๋๋ค.
dp1.removeLast()
5. ๊ฐ์ฅ ํฐ ๊ฐ์ ๋ฐํํ๋ค.
์ฒซ ๋ฒ์งธ ์คํฐ์ปค๋ฅผ ๋ฏ์ด๋์ ๋์ ๋ ๋ฒ์งธ ์คํฐ์ปค๋ฅผ ๋ฏ์ด๋์ ๋์ ๊ฐ๋ค ์ค ๊ฐ์ฅ ํฐ ๊ฐ์ ๋ฐํํฉ๋๋ค.
return max(dp1.max()!,dp2.max()!)
Source Code
๋๋์
๋ ์ญ์ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ๋๋ฌด ์ฝํ๋ค...
์ด๋ป๊ฒ ํ์ด์ผํ ์ง๋ ๊ฐ์ด ์์๊ณ ... ๊ฒฐ๊ตญ ๋ค๋ฅธ ์ฌ๋ ํ์ด๋ฅผ ๋ดค๋๋ฐ ํ์ด๋ฅผ ๋ด๋ ์ดํดํ๋๋ฐ ์ข ์๊ฐ์ด ๊ฑธ๋ ธ๋ค...
์๊ฐ ๋จ์ ๋ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ๋ง ๋นก์ธ๊ฒ ์ค๋นํด์ผ๊ฒ ๋ค..
์ ๊ทธ๋ฆฌ๊ณ ์ด ๋ฌธ์ ๊ฐ ์๋ 4๋จ๊ณ์๋๋ฐ 3๋จ๊ณ๋ก ๋ด๋ ค์จ๊ฑฐ ๊ฐ๋ค... ๋ค๋ฅธ ๋ถ๋ค์ ๋ค 4๋จ๊ณ๋ผ๊ณ ํ์ จ๋ค..
์ด์ฉ์ง ์ด๋ ต๋๋ผ..
๋๊ธ