import java.util.*;

public class Main{
	public static void main(String args[]){
		Scanner sc=new Scanner(System.in);
        System.out.print("몇번째 피보나치수?");
         int n=sc.nextInt();
         int n1=0;
         int n2=0;
         int temp1=0;
         int temp2=0;
         
         for(int i=0;i<n;i++) {
             if(i==0||i==1) {
             	n1=n2;n2=1;
             }
             else {
                 temp1=n1;
                 temp2=n2;
                 n1=temp2;
                 n2=temp1+temp2;
             }
         }        
         System.out.println(n+"번째 피보나치 수는 "+n2);
	}
}

코세라의 알고리즘 파트1 강의를 오늘 처음 들어봤는데, 첫 주제가 dynamic connectivity였다. 강의만 들을 땐 그래도 이해가 좀 되고 흥미가 있었는데,

백준알고리즘에서  다이나믹 프로그래밍 카테고리에서 문제를 풀어봤는데 너무 어려웠다...

변수선언하는 것부터가 난관이었다...

좀 부끄럽기까지 하다.

다른 블로그의 코딩을 참고해서 어찌저찌 이해는 했지만, 이따가 다시한번 더 풀어봐야겠다...!


몇번째의 피보나치 수를 구하기 위해 변수를 몇개 사용해야 할까 생각해 봤다. 

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597

 

Fn = Fn-1 + Fn-2 (n ≥ 2)

  • Fn-1 [n1]Fn-2 [n2] , 두개
  • Fn, 그 둘을 더한 값이 들어갈 변수 하나 [tmp]

총 3개가 필요하다.

그래서 짠 코드는

import java.util.*;

public class Main{
	public static void main(String args[]){
		Scanner in=new Scanner(System.in);
		System.out.print("몇번째 피보나치수?");
		int n = in.nextInt();
		
		int n1=0;
		int n2=0;
		int tmp;
		
		for(int i=0; i<n; i++) {
			 if(i==0||i==1) {
				 n1=n2;
				 n2=1;
			  }
			 else {
				 tmp=n1+n2;
				 n1=n2;
				 n2=tmp;
			 }
		}

		System.out.println(n+"번째 피보나치 수는 "+n2);
		in.close();
	}
}	

블로그에서 참고한 코드보다 변수가 하나 줄일 수 있는 코드를 만든 것 같다!

'알고리즘 공부 > coding test' 카테고리의 다른 글

백준 11399 [ATM]  (0) 2022.05.18
백준 2217[로프]  (0) 2022.05.17
백준 2358 [평행선]  (0) 2022.02.08
백준 2609 [최대공약수와 최소공배수]  (0) 2021.02.04
백준 11022 [A+B-8]  (0) 2021.02.04

+ Recent posts