๐ก solutions
๐ฌ ์ฒซ ๋ฒ์งธ ์คํฐ์ปค๋ฅผ ๋ฏ์ ๊ฒฝ์ฐ / ์ฒซ ๋ฒ์งธ ์คํฐ์ปค๋ฅผ ๋ฏ์ง ์์ ๊ฒฝ์ฐ ๋ ๊ฐ์ง๋ก ๋๋ ์ DP ํ ์ด๋ธ์ ๋ง๋ค๊ณ ํ์ด๋ฅผ ์งํํจ.
๐ฌ ํ ์คํธ์ผ์ด์ค 33๋ฒ์ด ๋ฐํ์์ด ๋์ ์ฐพ์๋ณด๋, ์ฃ์ง ์ผ์ด์ค N = 1์ผ ๋๋ฅผ ์ฒ๋ฆฌํด์ฃผ์ง ์์์ ์ธ๋ฑ์ค ์๋ฌ๊ฐ ๋ฐ์ํ๊ณ , ์ฒซ ๋ฒ์งธ if๋ฌธ์ผ๋ก ํด๋น ์ผ์ด์ค๋ฅผ ๋ณด์.
๐จ๐ป code
def solution(sticker):
if len(sticker) == 1: return sticker[0]
dp1 = [0]*len(sticker) # ์ฒซ ๋ฒ์งธ ์คํฐ์ปค๋ฅผ ๋ฏ์ ๊ฒฝ์ฐ
dp2 = [0]*len(sticker) # ์ฒซ ๋ฒ์งธ ์คํฐ์ปค๋ฅผ ๋ฏ์ง ์์ ๊ฒฝ์ฐ
dp1[0] = sticker[0]
dp1[1] = sticker[0]
for i in range(2, len(sticker)-1):
dp1[i] = max(dp1[i-2] + sticker[i], dp1[i-1])
dp2[1] = sticker[1]
for i in range(2, len(sticker)):
dp2[i] = max(dp2[i-2] + sticker[i], dp2[i-1])
return max(max(dp1), max(dp2))
๐ problem
๋ฌธ์ ์ค๋ช
N๊ฐ์ ์คํฐ์ปค๊ฐ ์ํ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค. ๋ค์ ๊ทธ๋ฆผ์ N = 8์ธ ๊ฒฝ์ฐ์ ์์์ ๋๋ค.
์ํ์ผ๋ก ์ฐ๊ฒฐ๋ ์คํฐ์ปค์์ ๋ช ์ฅ์ ์คํฐ์ปค๋ฅผ ๋ฏ์ด๋ด์ด ๋ฏ์ด๋ธ ์คํฐ์ปค์ ์ ํ ์ซ์์ ํฉ์ด ์ต๋๊ฐ ๋๋๋ก ํ๊ณ ์ถ์ต๋๋ค. ๋จ ์คํฐ์ปค ํ ์ฅ์ ๋ฏ์ด๋ด๋ฉด ์์ชฝ์ผ๋ก ์ธ์ ํด์๋ ์คํฐ์ปค๋ ์ฐข์ด์ ธ์ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด ์ ๊ทธ๋ฆผ์์ 14๊ฐ ์ ํ ์คํฐ์ปค๋ฅผ ๋ฏ์ผ๋ฉด ์ธ์ ํด์๋ 10, 6์ด ์ ํ ์คํฐ์ปค๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์คํฐ์ปค์ ์ ํ ์ซ์๊ฐ ๋ฐฐ์ด ํํ๋ก ์ฃผ์ด์ง ๋, ์คํฐ์ปค๋ฅผ ๋ฏ์ด๋ด์ด ์ป์ ์ ์๋ ์ซ์์ ํฉ์ ์ต๋๊ฐ์ return ํ๋ solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์. ์ํ์ ์คํฐ์ปค ๋ชจ์์ ์ํด ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์์ ๋ง์ง๋ง ์์๊ฐ ์๋ก ์ฐ๊ฒฐ๋์ด ์๋ค๊ณ ๊ฐ์ฃผํฉ๋๋ค.
์ ํ ์ฌํญ- sticker๋ ์ํ์ผ๋ก ์ฐ๊ฒฐ๋ ์คํฐ์ปค์ ๊ฐ ์นธ์ ์ ํ ์ซ์๊ฐ ์์๋๋ก ๋ค์ด์๋ ๋ฐฐ์ด๋ก, ๊ธธ์ด(N)๋ 1 ์ด์ 100,000 ์ดํ์ ๋๋ค.
- sticker์ ๊ฐ ์์๋ ์คํฐ์ปค์ ๊ฐ ์นธ์ ์ ํ ์ซ์์ด๋ฉฐ, ๊ฐ ์นธ์ ์ ํ ์ซ์๋ 1 ์ด์ 100 ์ดํ์ ์์ฐ์์ ๋๋ค.
- ์ํ์ ์คํฐ์ปค ๋ชจ์์ ์ํด sticker ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์์ ๋ง์ง๋ง ์์๊ฐ ์๋ก ์ฐ๊ฒฐ๋์ด์๋ค๊ณ ๊ฐ์ฃผํฉ๋๋ค.