코테/프로그래머스

[프로그래머스/Lv. 3] 정수 삼각형 (JAVA)

imname1am 2023. 9. 29. 22:54
반응형

🔺 문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

🔺 코드

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
import java.util.*;
 
class Solution {
    public int solution(int[][] triangle) {
        
        int[][] dp = new int[501][501];
        dp[0][0= triangle[0][0];
        
        int max = 0;
        
        // 끝자리에 위치한 칸들 처리
        for(int i = 1 ; i < triangle.length ; i++) {
            dp[i][0= dp[i-1][0+ triangle[i][0];
            dp[i][triangle[i].length - 1= dp[i-1][i-1+ triangle[i][i];
        }
        
        // 중간에 위치한 칸들 처리
        for(int i = 1 ; i < triangle.length ; i++) {
            for(int j = 0 ; j < triangle[i].length ; j++) {
                if(j == 0 || j == i)    continue;
                
                dp[i][j] = Math.max(dp[i-1][j-1], dp[i-1][j]) + triangle[i][j];
                max = Math.max(max, dp[i][j]);
            }
        }
        
        return max;
    }
}
cs

 

 

🧩 해결 아이디어

• DP

: 양 끝에 위치한 경우와 중간에 위치한 경우 2가지로 나눠 생각한다.

 

1. 양 끝에 위치한 경우

 1) 맨 왼쪽에 위치한 경우, 바로 위쪽에 있는 값과 현재 칸 값을 더함

    (dp[i][j] = dp[i-1][0] + triangle[i][0])

 2) 맨 오른쪽에 위치한 경우, 바로 위쪽에 있는 값과 현재 칸 값을 더함

    (dp[i][j] = dp[i-1][i-1] + triangle[i][i])

 

2. 중간에 위치한 경우

: 왼쪽 위 값과 오른쪽 위 값 中 큰 값과 현재 칸 값을 더함

(dp[i][j] = Math.max(dp[i-1][j-1], dp[i-1][j]) + triangle[i][j])

 

 


🔺 다른 풀이들

- dp배열 따로 만들지 않고, 기존의 triangle 배열만 활용하셨다.. 깔끔하시구나!!

import java.util.*;
class Solution {
    public int solution(int[][] triangle) {
        for (int i = 1; i < triangle.length; i++) {
            triangle[i][0] += triangle[i-1][0];
            triangle[i][i] += triangle[i-1][i-1];
            for (int j = 1; j < i; j++) 
                triangle[i][j] += Math.max(triangle[i-1][j-1], triangle[i-1][j]);
        }

        return Arrays.stream(triangle[triangle.length-1]).max().getAsInt();
    }
}

 


💬 느낀 점

이렇게 규칙이 빠르게 보이는 DP문제라면 언제든지 환영..

 

 

1회독 2회독 3회독 4회독 5회독
V        
반응형