도둑질
프로그래머스 Level 4 DP
문제링크
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
원형의 형태로 집들이 위치해 있고, 연속된 두 집을 방문하지 않으면서 최대로 가질 수 있는 값을 구하는 문제
문제 풀이
Buttom-up 방식으로 풀이했다.
첫번째 집을 방문하냐 안하냐로 두개의 dp 로 나눠 진행했다.
코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int dp1[1000000 + 30];
int dp2[1000000 + 30];
int solution(vector<int> money)
{
int answer = 0;
dp1[0] = money[0];
dp1[1] = money[0];
dp2[0] = 0;
dp2[1] = money[1];
for (int i=2; i<money.size()-1; i++) {
dp1[i] = max(dp1[i-2] + money[i], dp1[i-1]);
}
for (int i=2; i<money.size(); i++) {
dp2[i] = max(dp2[i-2] + money[i], dp2[i-1]);
}
answer = *max(max_element(dp1, dp1+money.size()), max_element(dp1, dp2+money.size()));
return answer;
}
Python 코드
def solution(money):
if len(money) == 1:
return money[0]
dp1 = [0] * len(money)
dp2 = [0] * len(money)
dp1[0] = money[0]
dp1[1] = money[0]
dp2[0] = 0
dp2[1] = money[1]
for i in range(2, len(money) - 1):
dp1[i] = max(dp1[i-2] + money[i], dp1[i-1])
for i in range(2, len(money)):
dp2[i] = max(dp2[i-2] + money[i], dp2[i-1])
answer = max(max(dp1[:len(money)-1]), max(dp2))
return answer
회고
프로그래머스의 스티커 모으기와 완전히 동일한 풀이로 통과 가능한 문제였다
스티커 모으기
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'ps > 알고리즘' 카테고리의 다른 글
코드트리 - 마법의 숲 탐색 (2) | 2024.10.05 |
---|---|
99클럽 코테스터디 42일차 TIL 프로그래머스- 코딩테스트 공부 (0) | 2024.09.01 |
99클럽 코테스터디 40일차 TIL 프로그래머스- 등굣길 (0) | 2024.08.30 |
99클럽 코테스터디 39일차 TIL 프로그래머스- 로또의 최고 순위와 최저 순위 (0) | 2024.08.29 |
99클럽 코테스터디 38일차 TIL 프로그래머스- 혼자 놀기의 달인 (1) | 2024.08.28 |