알고리즘 및 자료구조/문제
백준알고리즘 2579번 계단 오르기
ktko
2018. 4. 23. 15:32
백준알고리즘
https://www.acmicpc.net/problem/2579
세계의 계단을 연속해서 오를 수가 없다.
현재 있는 계단 전의 계단을 밟지 않은 경우와 계단 전의 계단을 밟은 경우를 저장한 후
Math.max(stairArray[i] + memoArray[i - 2], stairArray[i] + stairArray[i - 1] + memoArray[i - 3]); 기저 식을 대입하여 문제를 풀었다.
import java.util.Scanner; public class Test { public static int[] memoArray; public static int[] stairArray; public static int count; public static void main(String[] args) { Scanner scan = new Scanner(System.in); count = Integer.parseInt(scan.nextLine().trim()); stairArray = new int[count + 1]; for(int i = 1; i < stairArray.length; i++) { stairArray[i] = Integer.parseInt(scan.nextLine().trim()); } memoArray = new int[count + 1]; for(int i = 1; i < memoArray.length; i++) { memoArray[i] = 0; } calculate(); } public static void calculate() { for(int i = 1; i < memoArray.length; i++) { if(i < 3) { memoArray[i] += memoArray[i-1] + stairArray[i]; continue; } if(i == 3) { memoArray[i] = Math.max(stairArray[i] + memoArray[i - 2], stairArray[i] + stairArray[i - 1]); continue; } if(i > 3) { memoArray[i] = Math.max(stairArray[i] + memoArray[i - 2], stairArray[i] + stairArray[i - 1] + memoArray[i - 3]); } } System.out.println(memoArray[count]); } }