728x90
반응형
안녕하세요 놀이방 사장입니다.
이번 포스팅은 백준 2579
"계단오르기" 입니다.
2579번: 계단 오르기
계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. <그림 1>과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점
www.acmicpc.net
DP문제입니다.
점화식을 구해야하는데 점화식은
이 조건을 보고 만들어야 합니다.
포스팅을 참조하다가 점화식을 제대로 설명해주는 그림이 있어 가지고 와봤습니다. (밑에 블로그에서 가지고 왔습니다.)
[백준] 2579번 : 계단 오르기 - JAVA [자바]
www.acmicpc.net/problem/2579 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단
st-lab.tistory.com
이 사진이 점화식을 그대로 설명해주는 이미지입니다.
n을 밟을 떄 경우의 수가 2가지가 있는 거죠
1. n 계단 전에 -3번째계단을 밟고 -1계단을 밟고 n번쨰 계단을 밟는 거죠
2. n-2번쨰 계단을 밟고 n번쨰 계단을 밟는다.
이걸 점화식으로 구현해주면
arr[i] = Math.max((arr[i-3]+stair[i-1]), arr[i-2]) + stair[i];
코드로 구현해보겠습니다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;
public class Main{
static int[] arr = new int[301]; //점수
static int[] stair = new int[301]; //계단에 부여되어있는 점수
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
for(int i=1; i<=n; i++){
stair[i] = Integer.parseInt(br.readLine());
}
arr[1] = stair[1];
arr[2] = stair[1] + stair[2];
arr[3] = Math.max(stair[1], stair[2]) + stair[3];
for(int i=4; i<= n; i++){
arr[i] = Math.max((arr[i-3]+stair[i-1]), arr[i-2]) + stair[i];
}
System.out.println(arr[n]);
}
}
문제랑 이미지를 생각해보시면 이해가 되실 거라고 생각합니다.
저도 저 이미지보고 이해를 했습니다.
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 15650] - N과 M (2) - JAVA [DFS] (1) | 2024.01.30 |
---|---|
[백준 9461] 파도반 수열 - JAVA [DP] (1) | 2024.01.30 |
[백준 11726] 2*n 타일링 - JAVA [DP] (0) | 2024.01.29 |
[백준 1003] 피보나치 함수 - JAVA - [DP] (1) | 2024.01.28 |
[백준 2606] 바이러스 - JAVA - [DFS] (1) | 2024.01.28 |