문제
You are climbing a staircase. It takes n steps to reach the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
제한사항
1 <= n <= 45
입출력 예시
Input: n = 2
Output: 2
Explanation: There are two ways to climb to the top.
1. 1 step + 1 step
2. 2 steps
설명
지난번 풀었던 백준 계단 오르기 문제와 비슷하다.
이번 문제에서는 n개의 계단을 오를 때 오를 수 있는 방식 개수를 출력하면 되는 문제이다.
계단은 1칸 or 2칸 오르는 것이 가능하다.
n = 1 -> 1칸
n = 2 -> (1칸 + 1칸) + (2칸)
n = 3 -> (1칸 + 1칸 + 1칸) + (2칸 + 1칸) + (1칸 + 2칸)
여기까지 봤을 때 1칸과 2칸은 선택의 여지가 없지만 3칸부터는 선택을 할 수 있다.
n이 3일 때 2칸이 남아 있다면 현재 1칸을 올라온 것이고, 1칸이 남아있다면 현재 2칸을 올라온 것이 된다.
그러므로 1칸일 때 올라 갈 수 있는 방법 + 2칸일 때 올라갈 수 있는 방법, 즉 [i - 1] + [i - 2] 를 해주면 된다는 의미.
코드
class Solution {
public int climbStairs(int n) {
int[] dp = new int[n + 1];
if (n <= 2) return n; // n이 2보다 작다면 n과 결과값이 같으므로 n 리턴
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <= n; i++){ // 3부터 반복
dp[i] = dp[i -1] + dp[i - 2];
}
return dp[dp.length -1]; // 마지막값 출력
}
}
'알고리즘' 카테고리의 다른 글
[Java] 백준 1003 피보나치 함수 (0) | 2023.12.21 |
---|---|
[Java] 백준 27127 수 나누기 게임 (1) | 2023.12.20 |
[Java] 백준 15918 랭퍼든 수열쟁이야!! (0) | 2023.12.17 |
[Java] 백준 2579 계단 오르기 (2) | 2023.12.16 |
[Java] 백준 2589 보물섬 (0) | 2023.12.16 |