[java]피보나치 함수 - 백준1003

문제



풀이

문제 해석을 하자면,

  • 피보나치 함수는 정말 유명한데 이 피보나치 함수를 구현하면 된다.


풀이

  • bottom-top 방식과
  • top-bottom 방식을 구현해보았다.
  • for문을 재귀로 또는 재귀를 for문으로 바꾸는것에 익숙해지자



코드

static int[][] dp = new int[44][2]; // 0횟수, 1횟수 를 구하기 위해 2차원 dp

//메모이제이션 연습
static int fib(int N, int j) {
    //메모이제이션
    if(dp[N][j]!=0) return dp[N][j];
    //base condition
    if(N==0) {
        if(j==0) return dp[N][0] = 1;
        if(j==1) return dp[N][1] = 0;
    }
    if(N==1) {
        if(j==0) return dp[N][0] = 0;
        if(j==1) return dp[N][1] = 1;
    }
    //recursion
    if(j==0) return dp[N][0] = fib(N-1,0)+ fib(N-2,0);
    if(j==1) return dp[N][1] = fib(N-1,1)+ fib(N-2,1);
    return -1;
}

public static void main(String[] args) throws IOException {
    StringBuilder sb = new StringBuilder();
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int T = Integer.parseInt(br.readLine());
    for(int t=0; t<T; t++){
        int N = Integer.parseInt(br.readLine());
        // 임시로 -> bottom-top 주석처리
        //      //init dp 
        //      dp[0][0] = 1; dp[0][1] = 0;
        //      dp[1][0] = 0; dp[1][1] = 1;
        //      //dp
        //      for(int i=2; i<=N; i++) {
        //        dp[i][0] = dp[i-1][0] + dp[i-2][0];
        //        dp[i][1] = dp[i-1][1] + dp[i-2][1];
        //      }
        fib(N, 0);
        fib(N, 1);
        sb.append(dp[N][0]).append(" ").append(dp[N][1]).append("\n");
    }
    System.out.println(sb);
}



느낀점

생략

댓글남기기