본문 바로가기

개발/알고리즘

[BOJ] 계단 오르기_2579

해당 문제는 DP를 이용해서 풀었다.

 

dp[4] 이상부터는 dp[i] = max(dp[i - 2] + data[i], dp[i - 3] + data[i] + data[i - 1])코드로 dp값을 구할 수 있다.

그렇다면 왜 저 코드가 최대값을 의미하는가?

 

나는 dp를 풀 때, 문제를 보고 직접 써보며 규칙을 찾아내려고 하는 편이다.

 

그래서 찾은 규칙: 4번째부터는 해당 값이 최대가 되려면, 4보다 두칸 적은 계단까지의 최대값(dp[2])와 data[4] 

or 4보다 3칸 적은 계단까지의 최대값(dp[1])과 data3+data4를 더한 후

이 두개 중 최대값이 dp[4]값이 된다.

 

이 문제를 풀 때 dp[i-1]+data[i]와 같은 식으로 풀려고 했으나 그럼 dp[i-1]이 두칸 연속으로 얻은 값인지 or 그렇지 않은 값인지를 알아야 했다.

그래서 무슨 2차원 배열 어쩌구,,, 막 이상한 생각을 했는데 이러한 흐름으로 생각하기 보단,

 

계단이 1개일 때 최대값은? 2개일 떄 최대값은? 이런식으로 혼자 되뇌이다가 규칙을 발견한 것 같다.

그러다보니 4개쨰부터는 저러한 식이 성립됨을 알게 되었다.

'개발 > 알고리즘' 카테고리의 다른 글

이진 탐색(Binary Search)란?  (0) 2021.02.17
[BOJ] 트리의 지름_1167  (0) 2021.02.16
[BOJ] 1로 만들기_1463  (0) 2021.02.03
[BOJ] 단어 정렬_1181  (0) 2021.02.02
백준 빙산 2573  (0) 2021.02.01