삐까냥의 파도타기

2579번) 계단 오르기 본문

코딩/백준 알고리즘

2579번) 계단 오르기

금손형아 2017. 10. 3. 00:19


문제 출처 : 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