문제 해석
- N층 만큼의 정수를 입력받은 삼각형이 있다.
- 문제를 설명하자면 아래와 같다.
- 초록색 피라미드 : 기존 배열 / 주황색 피라미드 : 최댓값을 저장 배열
코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
static int[][] floor;
static int N;
static Integer[][] dp;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
floor = new int[N][N];
dp = new Integer[N][N];
StringTokenizer st;
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < i + 1; j++) {
floor[i][j] = Integer.parseInt(st.nextToken());
}
}
br.close();
for(int i = 0; i < N; i++){
dp[N-1][i] = floor[N-1][i];
}
System.out.println(solution(0, 0));
}
public static int solution(int depth, int index){
if(depth == (N-1)){
return dp[depth][index];
}
if(dp[depth][index] == null){
dp[depth][index] = Math.max(solution(depth+1, index), solution(depth+1, index+1)) + floor[depth][index];
}
return dp[depth][index];
}
}
결과
느낀 점
- 유형은 반복되는 느낌이여서 크게 어려움은 없었지만, 동적계획법 자체가 아직 익숙하진 않아서 조금 헤매었다.
좋은 글 감사합니다. 자주 올게요 :)