From ebeac512801546b532bd8c4705a546df146e7855 Mon Sep 17 00:00:00 2001 From: SSUM <116950962+ssum21@users.noreply.github.com> Date: Fri, 7 Mar 2025 17:00:23 +0900 Subject: [PATCH] =?UTF-8?q?[level=204]=20Title:=20=EB=8F=84=EB=91=91?= =?UTF-8?q?=EC=A7=88,=20Time:=20571.08=20ms,=20Memory:=2072.2=20MB=20-Baek?= =?UTF-8?q?joonHub?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 프로그래머스/4/42897. 도둑질/README.md | 52 ++++++++++++++++++++++++++ 프로그래머스/4/42897. 도둑질/도둑질.py | 20 ++++++++++ 2 files changed, 72 insertions(+) create mode 100644 프로그래머스/4/42897. 도둑질/README.md create mode 100644 프로그래머스/4/42897. 도둑질/도둑질.py diff --git a/프로그래머스/4/42897. 도둑질/README.md b/프로그래머스/4/42897. 도둑질/README.md new file mode 100644 index 0000000..07d72f4 --- /dev/null +++ b/프로그래머스/4/42897. 도둑질/README.md @@ -0,0 +1,52 @@ +# [level 4] 도둑질 - 42897 + +[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/42897) + +### 성능 요약 + +메모리: 72.2 MB, 시간: 571.08 ms + +### 구분 + +코딩테스트 연습 > 동적계획법(Dynamic Programming) + +### 채점결과 + +정확성: 50.0
효율성: 50.0
합계: 100.0 / 100.0 + +### 제출 일자 + +2025년 03월 07일 17:00:21 + +### 문제 설명 + +

도둑이 어느 마을을 털 계획을 하고 있습니다. 이 마을의 모든 집들은 아래 그림과 같이 동그랗게 배치되어 있습니다.

+ +

image.png

+ +

각 집들은 서로 인접한 집들과 방범장치가 연결되어 있기 때문에 인접한 두 집을 털면 경보가 울립니다.

+ +

각 집에 있는 돈이 담긴 배열 money가 주어질 때, 도둑이 훔칠 수 있는 돈의 최댓값을 return 하도록 solution 함수를 작성하세요.

+ +
제한사항
+ + + +
입출력 예
+ + + + + + + + + + + +
moneyreturn
[1, 2, 3, 1]4
+ +> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges \ No newline at end of file diff --git a/프로그래머스/4/42897. 도둑질/도둑질.py b/프로그래머스/4/42897. 도둑질/도둑질.py new file mode 100644 index 0000000..b351b90 --- /dev/null +++ b/프로그래머스/4/42897. 도둑질/도둑질.py @@ -0,0 +1,20 @@ +def solution(money): + n = len(money) + if n == 1: + return money[0] + + def rob_linear(arr): + dp = [0] * len(arr) + dp[0] = arr[0] + if len(arr) >= 2: + dp[1] = max(arr[0], arr[1]) + for i in range(2, len(arr)): + dp[i] = max(dp[i-1], dp[i-2] + arr[i]) + return dp[-1] + + # 첫 번째 집 포함, 마지막 집 제외 + case1 = rob_linear(money[:-1]) + # 첫 번째 집 제외, 마지막 집 포함 + case2 = rob_linear(money[1:]) + + return max(case1, case2)