반응형
programmers.co.kr/learn/courses/30/lessons/42897
코딩테스트 연습 - 도둑질
도둑이 어느 마을을 털 계획을 하고 있습니다. 이 마을의 모든 집들은 아래 그림과 같이 동그랗게 배치되어 있습니다. 각 집들은 서로 인접한 집들과 방범장치가 연결되어 있기 때문에 인접한 ��
programmers.co.kr
DP문제이다.
인접한 집을 털게되면 경보음이 울게된다.
그래서 한집 띄어서 도둑이 털게 만들어야 한다.
현재 집의 돈의 금액과 [i-2]위치의 금액과의 합과 [i-1]에서의 도둑이 털수 있는 금액의 합을 비교해서 큰값을 가지면 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
def solution(money):
if len(money) == 3:
return max(money[0] , money[1] , money[2])
dp1 = [0] * len(money)
dp2 = [0] * len(money)
dp1[0] = money[0]
dp1[1] = max(money[0] , money[1])
for i in range(2 , len(money)-1):
dp1[i] = max(dp1[i-1] , money[i] + dp1[i-2])
dp2[0] = 0
dp2[1] = money[1]
for i in range(2 , len(money)):
dp2[i] = max(dp2[i-1] , money[i] + dp2[i-2])
answer = max(max(dp1) , max(dp2))
return answer
|
cs |
반응형
'프로그래밍 > 문제' 카테고리의 다른 글
BOJ - 회의실배정 (0) | 2020.09.28 |
---|---|
BOJ - 최솟값 ( 세그먼트트리) (0) | 2020.09.24 |
백준 1 2 3 더하기 (dp) (0) | 2017.02.10 |
바이러스 (0) | 2017.01.02 |
단지번호 붙이기 (0) | 2017.01.02 |