-
2579번 계단 오르기 / BOJ / acmicpc.net백준 2020. 1. 27. 22:46728x90
문제링크 : https://www.acmicpc.net/problem/2579
제출링크 : https://www.acmicpc.net/source/17179222
Java source : https://github.com/skysign/WSAPT/blob/master/acmicpc.net/2579%EB%B2%88%20%EA%B3%84%EB%8B%A8%20%EC%98%A4%EB%A5%B4%EA%B8%B0/src/Main.java피보나치수열과 비슷한 문제인대요, 한가지만 주의 하면 됩니다.
d_i-1 + st_i → d_i
d_i-2 + st_i → d_i
이렇게 이동 하면, 3칸을 연속으로 밟으면 안된다, 라는 룰을 지킬 수가 없어요
그래서 약간 변경해서, 아래와 같이 이동하면 룰을 지킬 수 있습니다.
d_i-3 + st_i-1 + st_i → d_i
d_i-2 + st_i → d_iimport java.util.Scanner; public class Main { public void solve() { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int[] st = new int[N+1]; int[] d = new int[N+1]; for(int i=1; i<=N; ++i) { st[i] = sc.nextInt(); } /** * i-1 → i * i-2 → i * 3칸을 연속으로 밟으면 안된다, 라는 룰을 지킬 수가 없어요 * 따라서, 점화식은 아래와 같아야 합니다. * i-3 → i-1 → i * i-2 → i * 여기서 중요한 점음 * i-3 은 0부터 i-3 까지 거처온 최대값, i-1 은 계단의 값 * i-2 은 0부터 i-2 까지 거처온 최대값 */ d[1] = st[1]; d[2] = Math.max(st[2-1], d[0]) + st[2]; d[3] = Math.max(st[3-1] + d[3-3], d[3-2]) + st[3]; for(int i=4; i<=N; ++i) { d[i] = Math.max(st[i-1] + d[i-3], d[i-2]) + st[i]; } System.out.println(d[N]); } public static void main(String[] args) { Main main = new Main(); main.solve(); } }
728x90'백준' 카테고리의 다른 글
BOJ 11726번 2×n 타일링 (0) 2020.01.27 9095번 1, 2, 3 더하기 / BOJ / acmicpc.net (0) 2020.01.27 1463번 1로 만들기 / BOJ / acmicpc.net (0) 2020.01.27 1149번 RGB거리 / BOJ / acmicpc.net (0) 2020.01.27 1003번 피보나치 함수 / BOJ / acmicpc.net (0) 2020.01.27