Skip to content

Commit 48e8b4f

Browse files
committed
[level 4] Title: 도둑질, Time: 27.71 ms, Memory: 104 MB -BaekjoonHub
1 parent 0efd374 commit 48e8b4f

File tree

2 files changed

+84
-0
lines changed

2 files changed

+84
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# [level 4] 도둑질 - 42897
2+
3+
[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/42897)
4+
5+
### 성능 요약
6+
7+
메모리: 104 MB, 시간: 27.71 ms
8+
9+
### 구분
10+
11+
코딩테스트 연습 > 동적계획법(Dynamic Programming)
12+
13+
### 채점결과
14+
15+
정확성: 50.0<br/>효율성: 50.0<br/>합계: 100.0 / 100.0
16+
17+
### 제출 일자
18+
19+
2025년 09월 18일 11:56:49
20+
21+
### 문제 설명
22+
23+
<p>도둑이 어느 마을을 털 계획을 하고 있습니다. 이 마을의 모든 집들은 아래 그림과 같이 동그랗게 배치되어 있습니다. </p>
24+
25+
<p><img src="https://grepp-programmers.s3.amazonaws.com/files/ybm/e7dd4f51c3/a228c73d-1cbe-4d59-bb5d-833fd18d3382.png" title="" alt="image.png"></p>
26+
27+
<p>각 집들은 서로 인접한 집들과 방범장치가 연결되어 있기 때문에 인접한 두 집을 털면 경보가 울립니다.</p>
28+
29+
<p>각 집에 있는 돈이 담긴 배열 money가 주어질 때, 도둑이 훔칠 수 있는 돈의 최댓값을 return 하도록 solution 함수를 작성하세요.</p>
30+
31+
<h5>제한사항</h5>
32+
33+
<ul>
34+
<li>이 마을에 있는 집은 3개 이상 1,000,000개 이하입니다.</li>
35+
<li>money 배열의 각 원소는 0 이상 1,000 이하인 정수입니다.</li>
36+
</ul>
37+
38+
<h5>입출력 예</h5>
39+
<table class="table">
40+
<thead><tr>
41+
<th>money</th>
42+
<th>return</th>
43+
</tr>
44+
</thead>
45+
<tbody><tr>
46+
<td>[1, 2, 3, 1]</td>
47+
<td>4</td>
48+
</tr>
49+
</tbody>
50+
</table>
51+
52+
> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import java.util.*;
2+
3+
class Solution {
4+
public int solution(int[] money) {
5+
int n = money.length; // 집의 갯수
6+
7+
if(n==1) return money[0];
8+
9+
// 첫번째 집을 터는 경우(마지막 집 제외)
10+
int[] dp1 = new int[n];
11+
dp1[0] = money[0];
12+
dp1[1] = Math.max(money[0],money[1]);
13+
14+
for(int i = 2; i < n-1; i++){
15+
// i번째 집을 털거나 or 털지 않거나
16+
dp1[i] = Math.max(dp1[i-1], dp1[i-2] + money[i]);
17+
}
18+
int max1 = dp1[n-2];
19+
20+
int[] dp2 = new int[n];
21+
dp2[0] = 0;
22+
dp2[1] = money[1];
23+
24+
for(int i = 2; i < n; i ++){
25+
dp2[i] = Math.max(dp2[i-1],dp2[i-2] + money[i]);
26+
}
27+
int max2 = dp2[n-1];
28+
29+
int answer = Math.max(max1,max2);
30+
return answer;
31+
}
32+
}

0 commit comments

Comments
 (0)