[파이썬] 프로그래머스 : 도둑질 (Lv.4)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
방향성 생각
- 첫 집을 터는 경우, 털지 않는 경우 두가지 상태로 나누어서 풀이
전체코드
def solution(money):
n = len(money)
if n<3:
return max(money[:2])
dp = [[0]*n for _ in range(2)] # dp[첫 집 터는 유무][위치]
dp[0][:2] = [0,money[1]]
dp[1][:2] = [money[0],max(money[:2])]
for state in range(2):
for stage in range(n-2):
dp[state][stage+2] = max(dp[state][stage+1], dp[state][stage] + money[stage+2])
return max(dp[0][-1],dp[1][-2])
- n<3인 경우 둘중에 값이 큰 집 선택
- DP 초기화
첫 집을 선택하지 않으면 dp[0][0] = 0, 이후 집을 선택하면 dp[0][1] = money[1]
첫 집을 선택하면 dp[1][0] = money[0], dp[1][1] = 쉬고 선택 or 선택하고 쉬기 중에 큰거 - dp[1][-1]은 경보 울리는 케이스라 답에서 제외
코멘트
스티커 모으기랑 똑같음
'Algorithm > Dynamic Programming' 카테고리의 다른 글
[파이썬] 백준 1102 : 발전소 (플레5) (0) | 2023.12.22 |
---|---|
[파이썬] 백준 5624 : 좋은 수 (골드 3) (0) | 2023.12.18 |
[파이썬] 백준 4781 : 사탕가게 (골드4) (0) | 2023.12.05 |
[파이썬] 프로그래머스 : 스티커 모으기 2 (Lv.3) (0) | 2023.11.23 |
[파이썬] 백준 10844 : 쉬운 계단 수 (실버1) (0) | 2023.11.23 |
[파이썬] 백준 18244 : 변형 계단 수 (골드3) (0) | 2023.11.23 |
[파이썬] 백준 1636 : 한번 열면 멈출 수 없어 (골드4) (0) | 2023.11.05 |
댓글