-
도둑질프로그래머스(Programmers) 2020. 2. 8. 15:18반응형
https://programmers.co.kr/learn/courses/30/lessons/42897
코딩테스트 연습 - 도둑질 | 프로그래머스
도둑이 어느 마을을 털 계획을 하고 있습니다. 이 마을의 모든 집들은 아래 그림과 같이 동그랗게 배치되어 있습니다. 각 집들은 서로 인접한 집들과 방범장치가 연결되어 있기 때문에 인접한 두 집을 털면 경보가 울립니다. 각 집에 있는 돈이 담긴 배열 money가 주어질 때, 도둑이 훔칠 수 있는 돈의 최댓값을 return 하도록 solution 함수를 작성하세요. 제한사항 이 마을에 있는 집은 3개 이상 1,000,000개 이하입니다. money 배열의 각
programmers.co.kr
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