[Algorithm] - 백준 2579 계단오르기 - java


import java.io.BufferedReader;
import java.io.InputStreamReader;



public class upstairs {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int stair[] = new int[301];
int Dp[] = new int[301];
//계단 점수 저장
for(int i=1; i<=N; i++)
stair[i] = Integer.parseInt(br.readLine());
for (int i = 1; i <= 3 && i <= N; i++){
//계단이 1개 혹은 2개까지는 연속된3개의 계단을 밟을수가 없으니까
        if (i!=3)
            Dp[i] = Dp[i - 1] + stair[i];
        //3일때..연속된3개의 계단이 안되려면 Dp[i-2] 사용.
        else
            Dp[i] = max(stair[i] + Dp[i - 2], stair[i] + stair[i - 1]);
}
    for (int i = 4; i <= N; i++)
        Dp[i]=max(stair[i] + Dp[i - 2], stair[i] + stair[i - 1] + Dp[i - 3]);
System.out.println(Dp[N]);
}
//max값 함수만들어서 사용
static int max(int a, int b)
{
    return a > b ? a : b;
}
}

내 머리로 바로 풀수가 없었고, 그래도 생각하는 시간을 적당히 가진 후
다른 분들의 코드를 보며 공부를 하였.. 나름 도움이 됬기를..

dp는 배열을 잘 이용해서 풀어가야하는걸 한번 더 깨달았다.

댓글