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; } } |
다이나믹 프로그래밍.. 넘나 어려운것...