Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 2589
- 문자열 압축
- dp
- 백준
- 고모네 콩탕
- 동적 프로그래밍
- BFS
- 양꼬치
- HTTP API
- 설탕 배달
- 2020 KAKAO BLIND
- 스프링
- 다이나믹 프로그래밍
- 1로 만들기
- mvc
- 서블릿
- 투어
- 완도산회
- 쓰레드 풀
- 맛집 투어
- 포두부 보쌈
- Spring
- 호유동
- 2638
- 프로그래머스
- 알고리즘
- Servlet
- 2839
- 스프링 MVC
- 맛집
Archives
- Today
- Total
프로그래밍 공방
[프로그래머스] 도둑질 본문
문제
programmers.co.kr/learn/courses/30/lessons/42897
코딩테스트 연습 - 도둑질
도둑이 어느 마을을 털 계획을 하고 있습니다. 이 마을의 모든 집들은 아래 그림과 같이 동그랗게 배치되어 있습니다. 각 집들은 서로 인접한 집들과 방범장치가 연결되어 있기 때문에 인접한
programmers.co.kr
문제해결방법
이 문제는 계단 오르기, 포도주 시식 과 비슷한 문제인데 원형으로 되어있다는 점이 달랐다.
그래서 첫번째 집과 마지막 집을 연속으로 털지 않도록 2가지 경우를 나눠서 계산해줬다.
1. 첫 번째 집을 터는 경우 : 이 경우에는 두 번째 집은 털 수 없으며, 마지막 집도 털 수 없다.
2. 첫 번째 집을 털지 않는 경우
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | package Programmers; public class solution_도둑질 { public static int solution(int[] money) { int answer = 0; int[][] DP = new int[2][money.length+1]; DP[0][1] = money[0]; for(int i=2; i<=money.length; i++) { if(i>2) DP[0][i] = Math.max(DP[0][i-2]+money[i-1], DP[0][i-1]); else DP[0][i] = DP[0][i-1]; DP[1][i] = Math.max(DP[1][i-2]+money[i-1], DP[1][i-1]); } answer = Math.max(DP[0][money.length-1], DP[1][money.length]); return answer; } public static void main(String[] args) { int[] money = {1, 2, 3, 1}; System.out.println(solution(money)); } } | cs |
코드에 대한 피드백이나 더 좋은 아이디어는 언제나 환영입니다.
'개발 > 문제해결' 카테고리의 다른 글
[백준] 1654번 : 랜선 자르기 (0) | 2021.01.12 |
---|---|
[백준] 2252번 : 줄 세우기 (0) | 2021.01.12 |
[프로그래머스] 3 x n 타일링 (0) | 2021.01.08 |
[프로그래머스] 무지의 먹방 라이브 (0) | 2021.01.06 |
[백준] 10844번 : 쉬운 계단 수 (0) | 2021.01.05 |