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 |
29 | 30 | 31 |
Tags
- 해시맵
- 스프링부트
- 자료구조
- 배열
- Java
- 이직
- docker
- 코딩테스트
- bfs
- 구현
- 인텔리제이
- 스타트업
- 도커
- 프로그래머스
- Linux
- 백엔드
- HTTP
- HashMap
- 스프링
- IntelliJ
- 명령어
- dfs
- 주니어
- 스프링 부트
- 해결
- 문자열
- 개발자
- 구름LEVEL
- spring
- spring boot
Archives
- Today
- Total
마이의 개발 블로그
[프로그래머스] 땅따먹기 (Java) 본문
반응형
동적 계획법(Dynamic Programming, DP) 문제이다. 처음에 DFS로 테스트 케이스를 풀어내긴 했는데 인풋 최대값이 100,000이다보니 실제 채점에서는 전부 통과되지 않아 DP로 바꾸어 풀게되었다. DP는 '기억하며 풀기'로 보통 바꾸어 말하는데 반복되는 문제에 대한 최적의 결과를 단계별로 메모리에 저장하고 이를 활용하여 다음 단계의 결과를 구하는 방식으로 사용한다. 여기서는 땅따먹기의 각 단계별로 직전단계까지의 최대값을 저장(또는 land에 바로 더해주기)하는 방식으로 DP를 구현했다.
- 1번 행부터 마지막 행까지 탐색하며:
1) 직전 단계에서 같은 열을 제외한 모든 숫자들의 최대값을 구함
2) 현 단계의 각 열에 직전 단계의 최대값을 더함
- 마지막 행을 돌며 최대값을 구하여 반환
Note
- 인풋의 복잡도를 고려하여 시간초과 나올 것 같으면 빨리 다른 방법을 찾자
- DP에 대해 자세하게 정리해봐야겠다.
class Solution {
int solution(int[][] land) {
for(int i = 1; i < land.length; i++){
land[i][0] += Math.max(land[i - 1][1], Math.max(land[i - 1][2], land[i - 1][3]));
land[i][1] += Math.max(land[i - 1][0], Math.max(land[i - 1][2], land[i - 1][3]));
land[i][2] += Math.max(land[i - 1][0], Math.max(land[i - 1][1], land[i - 1][3]));
land[i][3] += Math.max(land[i - 1][0], Math.max(land[i - 1][1], land[i - 1][2]));
}
int answer = 0;
for(int i = 0; i < 4; i++){
if(land[land.length - 1][i] > answer){
answer = land[land.length - 1][i];
}
}
return answer;
}
}
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 주식가격 (Java) (2) | 2023.03.15 |
---|---|
[프로그래머스] 뒤에 있는 큰 수 찾기 (Java) (0) | 2023.03.15 |
[프로그래머스] 대충 만든 자판 (Java) (0) | 2023.03.08 |
[프로그래머스] 유한소수 판별하기 (Java) (0) | 2023.02.22 |
[프로그래머스] 롤케이크 자르기 (Java) (0) | 2023.02.21 |
Comments