코딩테스트 연습 - 도둑질
도둑이 어느 마을을 털 계획을 하고 있습니다. 이 마을의 모든 집들은 아래 그림과 같이 동그랗게 배치되어 있습니다. 각 집들은 서로 인접한 집들과 방범장치가 연결되어 있기 때문에 인접한
programmers.co.kr
처음으로 알고리즘 문제를 풀었다.
** 생각해야될 조건
- 인접한 집은 도둑질이 안된다.
- 원 모양이므로, 첫 번째 집-마지막 집 = 인접하다
- i번째 집으로 생각해서 일반식을 만들어야함!
** 코드로 바꾼다면
1. dp[i] : i번째 집까지 털었을 때 최댓값
i-1번째 도둑질 O 경우 : i번째 집을 털 수 X -> dp[i-1]
i-1번째 도둑질 X 경우 : i번째 집을 털 수 O -> dp[i-2] + money[i]
그러므로 dp[i] = max( dp[i-1], dp[i-2]+money[i] )
2. 첫 번째 집 도둑질 O 경우 : n-2번째 집까지 털었을 때의 최댓값을 의미한다. (마지막 집(n-1번째 집)을 털 수 없기 때문에)
dp[0] = money[0]
dp[1] = money[0]
첫 번째 집 도둑질 X 경우 : n-1번째 집까지 털었을 때의 최댓값을 의미한다. (마지막집(n-1번째 집)을 털 수 있기 때문에)
dp[0] = 0
dp[1] = money[1]
'1d-1c > Programmers' 카테고리의 다른 글
Level1_예산 (JAVA) (0) | 2020.11.02 |
---|---|
Level1_두 개 뽑아서 더하기 (JAVA) (0) | 2020.10.31 |
Level1_크레인 인형뽑기 게임 (JAVA) (0) | 2020.10.31 |
Level1_완주하지 못한 선수 (C++) (JAVA) (0) | 2020.10.31 |
Level1_K번째 수 (JAVA) (0) | 2020.10.31 |