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
- useState
- 프로그래머스#JAVA
- Kruskal Algorithm
- spread operator
- batch udpate
- DB Navigator
- 리액트 상태값 업데이트
- rest operator
- 객체지향 설계 5원칙
- React 훅 사용규칙
- java
- react
- 리액트 성능 최적화
- BOJ2042
- Segment Tree
- 리액트의 작동방식
- DFS
- MST구현
- codility
- 프로그래머스
- useReducer
- 섬 연결하기
- state update scheduling
- heap
- State
- useContext
- Greedy
- Lifting State Up
- JS Array Functions
- Modern Javascript
Archives
- Today
- Total
개발하는SM
[프로그래머스] 정수 삼각형 본문
programmers.co.kr/learn/courses/30/lessons/43105
코딩테스트 연습 - 정수 삼각형
[[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] 30
programmers.co.kr
문제 설명
위와 같은 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를 찾아보려고 합니다. 아래 칸으로 이동할 때는 대각선 방향으로 한 칸 오른쪽 또는 왼쪽으로만 이동 가능합니다. 예를 들어 3에서는 그 아래칸의 8 또는 1로만 이동이 가능합니다.
삼각형의 정보가 담긴 배열 triangle이 매개변수로 주어질 때, 거쳐간 숫자의 최댓값을 return 하도록 solution 함수를 완성하세요.
제한사항
- 삼각형의 높이는 1 이상 500 이하입니다.
- 삼각형을 이루고 있는 숫자는 0 이상 9,999 이하의 정수입니다.
풀이
삼각형의 맨 아랫변 바로 위에 있는 층부터, 최댓값을 계산하면서 올라가면 풀 수 있는 문제이다.
아래 칸으로 이동할 때는 오른쪽 OR 왼쪽이므로,
MAX(현재값 + 아래층 왼쪽 값, 현재값 + 아래층 오른쪽 값) 형태로 계산하면서 올라가면 되는 문제였다.
import java.util.*;
class Solution {
public int solution(int[][] triangle) {
int answer = 0;
int dp[][] = new int[triangle.length][triangle.length];
for(int i = 0; i<triangle.length; i++){
for(int j=0; j<triangle[i].length; j++){
dp[i][j] = triangle[i][j];
}
}
for(int i = triangle.length-2; i>=0; i--){
for(int j=0; j<=i; j++){
dp[i][j] = Math.max(dp[i][j] + dp[i+1][j], dp[i][j] + dp[i+1][j+1]);
//System.out.println(i + ", " + j + " = " + dp[i][j] );
}
}
answer = dp[0][0];
return answer;
}
}
'Algorithm > DP' 카테고리의 다른 글
[프로그래머스] 등굣길 (0) | 2020.11.12 |
---|---|
[프로그래머스] 도둑질 (0) | 2020.11.12 |
[프로그래머스] N으로 표현 (0) | 2020.11.09 |