File tree Expand file tree Collapse file tree 2 files changed +84
-0
lines changed
Expand file tree Collapse file tree 2 files changed +84
-0
lines changed Original file line number Diff line number Diff line change 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
Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments