본문으로 바로가기
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

백준알고리즘


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]);
    }
}