[파이썬] 프로그래머스 : 스티커 모으기 2 (Lv.3)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
방향성 생각
- 첫 스티커를 선택하면 마지막 스티커를 선택하지 못한다. 첫 스티커 선택 유무에 따라 2가지로 나뉨
- dp[스티커 선택 유무][스티커 위치]
전체코드
def solution(sticker):
n = len(sticker)
if n<3:
return max(sticker[:2])
dp = [[0]*n for _ in range(2)] # dp[처음 스티커 선택 유무][위치]
dp[0][:2] = [0,sticker[1]]
dp[1][:2] = [sticker[0],max(sticker[:2])]
for state in range(2):
for stage in range(n-2):
dp[state][stage+2] = max(dp[state][stage+1], dp[state][stage] + sticker[stage+2])
return max(dp[0][-1],dp[1][-2])
- n<3인 경우 둘중에 큰거 하나 고르면 된다.
- 처음 선택 안하면 0, 처음 선택 안하고 다음거는 sticker[1]
- 처음 선택하면 sticker[0], 처음 선택하면 2번째에는 sticker[0]이랑 처음 선택 안하고 두 번째거 선택한 stciker[1] 중 최대값 선택
- dp[처음 선택 안한거 중][마지막], dp[처음 선택 한거][마지막-1]
- dp[1][-1]은 불가능한 값이라 고려 x
코멘트
.
'Algorithm > Dynamic Programming' 카테고리의 다른 글
[파이썬] 백준 5624 : 좋은 수 (골드 3) (0) | 2023.12.18 |
---|---|
[파이썬] 백준 4781 : 사탕가게 (골드4) (0) | 2023.12.05 |
[파이썬] 프로그래머스 : 도둑질 (Lv.4) (0) | 2023.11.23 |
[파이썬] 백준 10844 : 쉬운 계단 수 (실버1) (0) | 2023.11.23 |
[파이썬] 백준 18244 : 변형 계단 수 (골드3) (0) | 2023.11.23 |
[파이썬] 백준 1636 : 한번 열면 멈출 수 없어 (골드4) (0) | 2023.11.05 |
[파이썬] 백준 14550 : 마리오 파티 (골드5) (0) | 2023.10.22 |
댓글