-
도둑질프로그래머스(Programmers) 2020. 2. 8. 15:18반응형
https://programmers.co.kr/learn/courses/30/lessons/42897
leetcode 의 house robber 문제랑 유사 이웃하지 않은 집 노드의 합중 가장 큰 값을 출력
DP 접근
시작점은 0, 1 둘중에 하나로 시작 해야한다.
0 으로 시작 했을땐 마지막과 마주 볼수 있으니 전체크기 - 1 만큼 DP 값을 채운다.
1 로 시작했을 때는 마지막까지 DP 값을 채운다.
각각에 합중 가장 큰 값을 출력 한다.
#include <string> #include <vector> using namespace std; int solution(vector<int> money) { int size = money.size(); if(size == 0) return 0; else if(size == 1) return money[0]; int sol1 = money[0]; int minus_two = 0; for(int i = 1; i < size - 1; ++i) { int tmp = sol1; sol1 = max(sol1, minus_two + money[i]); minus_two = tmp; } int sol2 = money[1]; minus_two = 0; for(int i = 2; i < size; ++i) { int tmp = sol2; sol2 = max(sol2, minus_two + money[i]); minus_two = tmp; } return max(sol1, sol2); }
반응형'프로그래머스(Programmers)' 카테고리의 다른 글
최고의 집합 (0) 2020.02.08 코딩테스트 연습 > 해시 > 위장 (0) 2020.02.06 완전탐색 > 모의고사 (0) 2020.02.06 2017 팁스타운 > 짝지어 제거하기 (0) 2020.02.06 완전탐색 > 소수 찾기 (0) 2020.02.05