[LeetCode] 26.Climbing Stairs

2021. 6. 24. 17:51

https://leetcode.com/problems/climbing-stairs/

 

Climbing Stairs - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

1. Problem

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?

 

Example 1:

Input: n = 2

Output: 2

Explanation: There are two ways to climb to the top. 1. 1 step + 1 step 2. 2 steps

 

Example 2:

Input: n = 3

Output: 3

Explanation: There are three ways to climb to the top. 1. 1 step + 1 step + 1 step 2. 1 step + 2 steps 3. 2 steps + 1 step

 

2. Code

package leetCode;

public class climbingStairs {

	public static void main(String[] args) {
		System.out.println("답: " + climbStairs(5));
	} 
	
	public static int climbStairs(int n) {
		int[] temp = new int[n+1];
		if(n <= 2) {
			return n;
		} else {
			temp[1] = 1;
			temp[2] = 2;
			return nextStep(n-1, temp) + nextStep(n-2, temp);
		}
    }
	
	public static int nextStep(int n, int[] temp) {
		if(temp[n] > 0) {
			return temp[n];
		} else {
			temp[n] = nextStep(n-1, temp) + nextStep(n-2, temp);
		}
		return temp[n];
	}
}

 

3. Report

이 문제는 1계단 올라가느냐 2계단 올라가느냐기때문에 n-1호출과 n-2 호출의 합인 재귀로 풀 수 있다. 

처음엔 단순 재귀형식으로 풀었더니 작은 수에서는 풀리지만 큰 수에서는 시간초과가 나왔다.

구글링을 해보니 이렇게 풀면 방문했던 n번째도 계속 방문하게 되어서 2ⁿ 시간이 걸린다더라,,

방법은 int[] temp를 만들어서 한 번 방문했던 곳은 다시 계산 안해도 될 수 있게 코드를 짰다.

재귀로 코드를 짜다보면 내가 맞게 찾는지 헷갈릴때가 있어서 직접 손으로 그려보는 것이 좋다

 

'Algorithm > 문제' 카테고리의 다른 글

[programmers] 28. 주식가격  (0) 2021.07.01
[programmers] 27. 최댓값과 최솟값  (0) 2021.07.01
[boostCamp] 25. 자가진단 문제 6번  (0) 2021.06.23
[LeetCode] 24.Missing Number  (0) 2021.06.01
[LeetCode] 23.Rotate String  (0) 2021.05.27

BELATED ARTICLES

more