문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/42897

제한 사항

입출력 예

풀이
class Solution {
public int solution(int[] money) {
int[][] result = new int[3][];
int[] max = new int[3];
for (int i = 0; i < 3; i++) {
result[i] = new int[money.length];
result[i][i] = money[i];
if (i + 2 < money.length) result[i][i + 2] = money[i] + money[i + 2];
if (i + 3 < money.length) result[i][i + 3] = money[i] + money[i + 3];
}
for (int i = 0; i < money.length; i++) {
if (result[0][i] != 0) {
if (i + 2 < money.length) {
if (i + 2 != money.length - 1) {
result[0][i + 2] = Math.max(result[0][i] + money[i + 2], result[0][i + 2]);
max[0] = Math.max(result[0][i + 2], max[0]);
}
}
if (i + 3 < money.length) {
if (i + 3 != money.length - 1) {
result[0][i + 3] = Math.max(result[0][i] + money[i + 3], result[0][i + 3]);
max[0] = Math.max(result[0][i + 3], max[0]);
}
}
}
for (int j = 1; j < 3; j++) {
if (result[j][i] != 0) {
if (i + 2 < money.length) {
result[j][i + 2] = Math.max(result[j][i] + money[i + 2], result[j][i + 2]);
max[j] = Math.max(result[j][i + 2], max[j]);
}
if (i + 3 < money.length) {
result[j][i + 3] = Math.max(result[j][i] + money[i + 3], result[j][i + 3]);
max[j] = Math.max(result[j][i + 3], max[j]);
}
}
}
}
return Math.max(max[0], Math.max(max[1], max[2]));
}
}
후기
처음 풀어본 레벨 4 문제이다ㄷㄷ 아직 나에게는 레벨 4는 이른지 푸는데 많이 애를 먹었다. 그리고 풀고 나서 다른 사람 풀이를 보니 거의 다 내 코드 길이의 반정도였다ㄷㄷㄷㄷ 사실 효율성 테스트 10번째가 통과가 안 돼서 for문 3번 돌리는걸 첫 번째 경우만 밖으로 빼서 조건을 줄여 억지로 통과했다. 대신 코드 길이를 내주었다...
나는 일단 가능한 경우를 2칸 점프, 3칸 점프일 때로 나누었다. 4번째 이후로는 2와 3으로 전부 대체 가능해서 그 이후의 경우는 생각할 필요가 없다. 그리고 매번 3번을 반복하는 이유는 첫 번째(인덱스로는 0) 집, 두 번째 집, 세 번째 집에서 출발하는 경우에 첫 번째 집에서 2칸, 3칸 점프 중 선택, 두 번째 집에서 ... 반복으로 하기 때문이다.
'코딩테스트 (프로그래머스) > Java' 카테고리의 다른 글
| [프로그래머스][JAVA][Lv. 0] OX퀴즈 (0) | 2023.09.18 |
|---|---|
| [프로그래머스][JAVA][Lv. 2] 피로도 (0) | 2023.09.17 |
| [프로그래머스][JAVA][Lv. 3] 이중우선순위큐 (0) | 2023.09.15 |
| [프로그래머스][JAVA][Lv. 2] 뉴스 클러스터링 (0) | 2023.09.14 |
| [프로그래머스][JAVA][Lv. 2] 프로세스 (0) | 2023.09.12 |