본문 바로가기
알고리즘

Recursion: Davis' Staircase 풀이 Java

by 내기록 2022. 7. 10.
반응형
 

Recursion: Davis' Staircase | HackerRank

Recursion: Davis' Staircase | HackerRank We use cookies to ensure you have the best browsing experience on our website. Please read our cookie policy for more information about how we use cookies.

www.hackerrank.com

 

Recursion and Backtracking에 DP를 살짝 얹은 문제

 

피보나치와 비슷하게 공식을 만들면 되지만, n이 커지는 경우를 생각해서 DP를 사용해야 한다.

return stepPerms(n - 1) + stepPerms(n - 2) + stepPerms(n - 3);
 
 
만약에 n=20 일 때, dp를 사용하지 않으면
step(19)+step(18)+step(17)
 
step(19) = step(18)+step(17)+step(16)
step(18) = step(17)+step(16)+step(15)
...
 
이런식으로 쭉쭉 재귀의 늪에 빠지게 되는데
 
n=19일때의 값이 어딘가에 저장되어 있으면 step(19)=map.get(19); 이런식으로 바로 가져올 수 있음.
 
class Result {
    
    /*
     * Complete the 'stepPerms' function below.
     *
     * The function is expected to return an INTEGER.
     * The function accepts INTEGER n as parameter.
     */
    static HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
    
    public static int stepPerms(int n) {
        // Write your code here
        if (n < 0)
            return 0;
        else if (n == 0)
            return 1;
        
        if(map.containsKey(n))
        return map.get(n);
        
        map.put(n, stepPerms(n - 1) + stepPerms(n - 2) + stepPerms(n - 3));
        return map.get(n);
    }

}

 

이해하고 피보나치에 살짝 얹어보기

import java.util.*;

public class Solution {

    public static HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
    public static int fibonacci(int n) {
        if(n==0)
        return 0;
        else if(n==1)
        return 1;
        
        if(map.containsKey(n))
        return map.get(n);
        
        map.put(n, fibonacci(n-1)+fibonacci(n-2));
        return map.get(n);
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        scanner.close();
        System.out.println(fibonacci(n));
    }
}
반응형

'알고리즘' 카테고리의 다른 글

[HackerRank] Abbreviation 풀이 Java  (0) 2022.07.12
Alternating Characters 풀이 Java  (0) 2022.07.11
Strings: Making Anagrams java 풀이  (0) 2022.07.09
Hash Tables: Ice Cream Parlor 풀이 java  (0) 2022.07.09
Max Array Sum 풀이 Java  (0) 2022.07.09

댓글