삐까냥의 파도타기
2579번) 계단 오르기 본문
문제 출처 : https://www.acmicpc.net/problem/2579
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int input = scanner.nextInt(); int[] stair = new int[input]; int[] stairSum = new int[input];
for ( int i = 0; i < input; i++ ) { int temp = scanner.nextInt(); stair[i] = temp; }
if ( input > 0 ) { stairSum[0] = stair[0];
//1번째의 가장 큰 값 = 0번 + 1번 if ( input > 1 ) { stairSum[1] = stair[0] + stair[1]; }
//2번째의 가장 큰 값 = 0번 + 2번 or 1번 + 2번 (0번 + 1번 + 2번이 아님) if ( input > 2 ) { stairSum[2] = getMax( stair[0] + stair[2], stair[1] + stair[2] ); }
if ( input > 3 ) { for ( int i = 3; i < input; i++ ) { //패턴은 2가지. 1.두칸 + 한칸, 2. 두칸 stairSum[i] = getMax( stairSum[i - 3] + stair[i - 1] + stair[i], stairSum[i - 2] + stair[i] ); } } System.out.print(stairSum[input - 1]); } else { System.out.print("10,000이하의 자연수만 입력하세요."); } }
static int getMax( int temp1, int temp2) { return temp1 >= temp2 ? temp1 : temp2; } } |
다이나믹 프로그래밍.. 넘나 어려운것...
'코딩 > 백준 알고리즘' 카테고리의 다른 글
1932번) 숫자삼각형 (0) | 2017.10.03 |
---|---|
9095번) 1, 2, 3 더하기 (0) | 2017.10.03 |
1149번) RGB거리 (0) | 2017.10.02 |
1463번) 1로 만들기 (0) | 2017.10.02 |
1003번) 피보나치 함수 (0) | 2017.10.02 |