본문 바로가기

알고리즘/백준 & Leetcode

백준 10826 피보나치 수 4

문제

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다.

이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n>=2)가 된다.

n=17일때 까지 피보나치 수를 써보면 다음과 같다.

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

n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 n이 주어진다. n은 10,000보다 작거나 같은 자연수 또는 0이다.

출력

첫째 줄에 n번째 피보나치 수를 출력한다.

https://www.acmicpc.net/problem/10826


풀이 :

n이 10000일때의 피보나치 수는 상당히 길다. long long으로 커버가 안되기때문에 문자열 혹은 long long 배열을 생성해 처리해야한다.

본인은 문자열로 접근했는데, string 객체의 ' += ' 연산과 ' + ' 를 차이를 제대로 몰라 많은 어려움을 겪었다.

예를 들어 string 객체 A += B 와 A = A + B 가 있다고 가정하자.

전자같은 경우 A를 그대로 두고 뒤에 B 문자를 붙이게 된다. 하지만 후자는 A의 내용을 복사하고 뒤에 B를 더한 뒤 A에 다시 대입하게 된다.

후자 같은 경우는 시간 복잡도가 O(A.size()^2)가 소요되게 되는 것이다.

참고 : 

http://www.cplusplus.com/reference/string/string/append/

http://www.cplusplus.com/reference/string/string/operator+/

http://www.cplusplus.com/reference/string/string/operator+=/

http://www.cplusplus.com/reference/string/string/insert/


'알고리즘 > 백준 & Leetcode' 카테고리의 다른 글

백준 9935 문자열 폭발  (0) 2019.04.03
백준 2015 수들의 합 4  (0) 2019.04.03
백준 2517 달리기  (0) 2019.03.05
백준 7453 합이 0인 네 정수  (0) 2019.03.05
백준 2143 두 배열의 합  (0) 2019.02.22