| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 파이썬
- Stack
- 추천시스템
- Python
- isalpha()
- Algorithm
- isalnum()
- bfs
- 우선순위 큐
- find()
- 백준
- Deque
- isnumeric()
- 알고리즘
- explainable recommendation
- 코테
- LSTM
- 동적 프로그래밍
- knowledge
- Knowledge graph
- 프로그래머스
- DP
- kg
- Recommendation
- isdigit()
- 그래프 탐색
- 정렬
- 그래프
- Dynamic Programming
- 자료구조
Archives
- Today
- Total
데린이 고인물되기
[TIL] 250627 프로그래머스 - 도둑질 본문
반응형
도둑이 어느 마을을 털 계획을 하고 있습니다. 이 마을의 모든 집들은 아래 그림과 같이 동그랗게 배치되어 있습니다.

각 집들은 서로 인접한 집들과 방범장치가 연결되어 있기 때문에 인접한 두 집을 털면 경보가 울립니다.
각 집에 있는 돈이 담긴 배열 money가 주어질 때, 도둑이 훔칠 수 있는 돈의 최댓값을 return 하도록 solution 함수를 작성하세요.
제한사항- 이 마을에 있는 집은 3개 이상 1,000,000개 이하입니다.
- money 배열의 각 원소는 0 이상 1,000 이하인 정수입니다.
| money | return |
| [1, 2, 3, 1] | 4 |
나의 답
def making_dp(money):
n = len(money)
money.insert(0,0) # 더미 변수 추가
dp = [0] * len(money)
if n >= 1:
dp[1] = money[1]
if n>= 2:
dp[2] = money[2]
if n>= 3:
dp[3] = dp[1] + money[3]
for i in range(4, len(money)):
dp[i] = max(dp[i-2]+money[i], dp[i-3] + money[i])
# print(dp)
return dp
def solution(money):
# 1. 첫번째 집 무조건 선택하는 경우
money1 = money.copy()[2:-1]
n1 = len(money1)
dp1 = making_dp(money1)
compare1 = max(dp1[-1], dp1[-2]) + money[0]
# 2. 첫번재 집 선택 하지 않는 경우
money2 = money.copy()[1:]
dp2 = making_dp(money2)
compare2 = max(dp2[-1], dp2[-2])
answer = max(compare1,compare2)
return answer
- 풀이과정을 떠올린 과정은 아래와 같습니다.


반응형
'Algorithm > 문제' 카테고리의 다른 글
| [TIL] 250629 프로그래머스 - 큰 수 만들기 (0) | 2025.06.29 |
|---|---|
| [TIL] 250628 프로그래머스 - 전화번호 목록 (0) | 2025.06.28 |
| [TIL] 250627 프로그래머스 - 사칙연산 (0) | 2025.06.27 |
| [TIL] 250626 프로그래머스 - 등굣길 (0) | 2025.06.27 |
| [TIL] 250626 프로그래머스 - N으로 표현 (0) | 2025.06.27 |