백준 2579번 계단 오르기
< 백준 2579번 계단 오르기 - 마포 코딩박 >
사용한 알고리즘: DP
계단을 1칸, 혹은 2칸 오를 수 있고 연속된 3칸의 계단을 연속으로 밟아서는 안됩니다. 각 계단 칸을 밟을 때 해당 칸의 점수를 얻을 수 있습니다. 이때 마지막 칸에 도착했을 때 얻을 수 있는 최대 점수를 구하는 문제였습니다.
문제풀이는 다음과 같습니다.
(1) (코드 5~7)
'dp[x][0] : 1칸 올라와서 x칸 도착했을 때 점수 최댓값' ,
'dp[x][1] : 2칸 올라와서 x칸 도착했을 때 점수 최댓값' 으로 설정했습니다.
(2) (코드 12~15)
dp[1][0] = A[1] : 1칸 올라와서 1계단에 도착했을 때 얻을 수 있는 점수 최댓값
dp[2][0] = A[1]+A[2] : 1칸 올라와서 2계단에 도착했을 때 얻을 수 있는 점수 최댓값
dp[2][1] = A[2] : 2칸 올라와서 2계단에 도착했을 때 얻을 수 있는 점수 최댓값
위와같이 초기값을 설정합니다.
(3) (코드 17~20)
초기값을 바탕으로 dp 값을 계산해줍니다.
연속해서 3칸을 밟을 수 없기 때문에 dp[x][0] = dp[x-1][1]+A[x] 입니다.
즉 x-1칸에서 1칸 올라와서 x칸을 밟으려면 x-1칸은 2칸올라와서 도착했어야 합니다.
사용한 알고리즘: DP
계단을 1칸, 혹은 2칸 오를 수 있고 연속된 3칸의 계단을 연속으로 밟아서는 안됩니다. 각 계단 칸을 밟을 때 해당 칸의 점수를 얻을 수 있습니다. 이때 마지막 칸에 도착했을 때 얻을 수 있는 최대 점수를 구하는 문제였습니다.
문제풀이는 다음과 같습니다.
(1) (코드 5~7)
'dp[x][0] : 1칸 올라와서 x칸 도착했을 때 점수 최댓값' ,
'dp[x][1] : 2칸 올라와서 x칸 도착했을 때 점수 최댓값' 으로 설정했습니다.
(2) (코드 12~15)
dp[1][0] = A[1] : 1칸 올라와서 1계단에 도착했을 때 얻을 수 있는 점수 최댓값
dp[2][0] = A[1]+A[2] : 1칸 올라와서 2계단에 도착했을 때 얻을 수 있는 점수 최댓값
dp[2][1] = A[2] : 2칸 올라와서 2계단에 도착했을 때 얻을 수 있는 점수 최댓값
위와같이 초기값을 설정합니다.
(3) (코드 17~20)
초기값을 바탕으로 dp 값을 계산해줍니다.
연속해서 3칸을 밟을 수 없기 때문에 dp[x][0] = dp[x-1][1]+A[x] 입니다.
즉 x-1칸에서 1칸 올라와서 x칸을 밟으려면 x-1칸은 2칸올라와서 도착했어야 합니다.
댓글
댓글 쓰기
긴 글 읽어주셔서 감사합니다.
궁금한게 있으시다면 댓글 달아주세요!