https://www.acmicpc.net/problem/2579
2579번: 계단 오르기
계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. <그림 1>과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점
www.acmicpc.net
풀이
문제에 나타난 조건 2개
1. 계단은 한 번에 1칸 혹은 2칸 이동 가능
2. 3칸 연속으로 밟기 불가능
2개의 조건을 만족하며 N 번째 계단을 밟기 위해서
1. N-3 을 밟고 N-2 를 건너 뛰고 N-1, N 밟기
2..N-2 를 밟고 N-1 을 건너뛰고 N 밟기
이렇게 두 가지 경우가 존재 >> 연속 3개의 계단은 못밟기 때문
따라서 위 2가지의 값 중 큰 값 + N 번째 계단의 점수를 더한 값이 N 번째 계단의 점수 최대값
각 계단의 점수를 저장하고 있는 input 배열
N번째 계단의 최대점수를 기록하는 dp
dp[N] = Max(dp[N-2], dp[N-3]+input[N-1]) + input[N]
라는 점화식 도출
public void solution2579() throws Exception{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(reader.readLine());
int input[] = new int[n+1];
int dp[] = new int[n+1];
for(int i = 1; i<=n; i++)
input[i] = Integer.parseInt(reader.readLine());
dp[1] = input[1];
if(n>=2)
dp[2] = input[1] + input[2];
for(int i=3; i<=n; i++)
dp[i] = Math.max(dp[i-2], dp[i-3]+input[i-1])+input[i];
System.out.println(dp[n]);
}
'코딩테스트 > 문제풀이' 카테고리의 다른 글
[백준] 2xn 타일링 Java (0) | 2023.08.30 |
---|---|
[백준] 1, 2, 3 더하기 Java (0) | 2023.08.30 |
[백준] 가운데를 말해요 Java (0) | 2023.07.17 |
[구름] 직사각형 만들기 C++ (0) | 2023.07.11 |
[구름] 어부의 고기잡이 C++ (0) | 2023.07.10 |