Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 27 | 28 |
29 | 30 | 31 |
Tags
- 프로그래머스
- Special String Again
- Interview Preparation Kit
- 파이썬
- 야근지수
- 백준
- Reverse Shuffle Merge
- 격파르타 장점
- 격파르타 합격후기
- Recursion: Davis' Staircase
- candies
- 코딩테스트
- [sqld]자격증합격
- 피보나치 함수
- 격파르타 후기
- 구슬탈출2
- python
- Algorithm
- 알고리즘
- Roads and Libraries
- 해커랭크
- programmers
- Find the nearest clone
- BFS: Shortest Reach in a Graph
- 매칭점수
- hackerrank
- 머신러닝
- DFS: Connected Cell in a Grid
- Max Array Sum
- Common Child
Archives
- Today
- Total
Archive
[programmers] Level4. 도둑질 본문
https://programmers.co.kr/learn/courses/30/lessons/42897
풀이
- 동적 계획법(dynamic programming) 문제
- dp[i] : i번째 집까지 포함해 마을을 털었을 때의 최대 금액
- dp[i] = max ( dp[i-2] + money[i] , dp[i-1])
- 현재 집을 털때 획득 가능한 돈 + 2칸 이전 집까지 계산된 최대 금액 vs 현재 집을 털지 않고, 1칸 이전까지 계산된 최대 금액 비교
- 하지만 문제 조건에서, 원형으로 집이 배치되어있기 때문에, 첫 번째 집과 마지막 집을 동시에 털 수는 없음.
- 첫 번째 집을 털고, 마지막 집을 털지 않았을 때의 값 -> dp[ len(money) - 1 ]
- 첫 번째 집을 털지 않고, 마지막 집을 포함해 계산했을 떄의 값 -> dp [ len(money) ]
- 두 개의 값 중 최댓 값을 반환
- dp[i]를 계산하기 위해, dp[i-1], dp[i-2]만 있으면 되기 때문에 변수를 2개만 두고, replace하면서 값을 계산
- 집의 개수만큼 element를 가진 리스트를 선언할 수 있지만 여기서는 굳이 필요 없음
- dp = [0] * len(money) 혹은 dp.append(dp[-1], dp[-2] + money)
def solution(money):
answer = 0
i_th = 0
i_th_minus_1 = 0
i_th_minus_2 = 0
# 1. 첫 번째 집을 털었을 경우
i_th_minus_2, i_th_minus_1 = money[0], money[0]
# range에서 마지막 집은 포함 안함.
for i in range(2, len(money)-1):
i_th = max(i_th_minus_2 + money[i], i_th_minus_1)
i_th_minus_2, i_th_minus_1 = i_th_minus_1, i_th
case1 = i_th
# 2. 첫 번째 집을 털지 않고, 두 번째 집을 털었을 경우
i_th_minus_2, i_th_minus_1 = 0, money[1]
for i in range(2, len(money)):
i_th = max(i_th_minus_2 + money[i], i_th_minus_1)
i_th_minus_2, i_th_minus_1 = i_th_minus_1, i_th
case2 = i_th
return max(case1, case2)
'공부 > Algorithm' 카테고리의 다른 글
[Hackerrank] [Medium] Sherlock and Anagrams (0) | 2020.08.22 |
---|---|
[programmers] Level4. 자동완성 (0) | 2020.08.17 |
[Hackerrank] [Medium] New Year Chaos (0) | 2020.08.12 |
[Hackerrank] [Hard] Maximum Subarray Sum (0) | 2020.08.11 |
[Hackerrank] pairs (0) | 2020.08.10 |
Comments