[자바스크립트, js] 프로그래머스 피보나치 수
안녕하세요.
오늘은 프로그래머스 난이도 2인 '피보나치 수' 라는 코테의 주관적인 소스 코드를 공유하고자 합니다!
난이도 2인것 치고는 자주 나와서 쉽게들 풀 수 있을거라 생각합니다!
문제 설명
피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다.
예를들어
F(2) = F(0) + F(1) = 0 + 1 = 1
F(3) = F(1) + F(2) = 1 + 1 = 2
F(4) = F(2) + F(3) = 1 + 2 = 3
F(5) = F(3) + F(4) = 2 + 3 = 5
와 같이 이어집니다.
2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요.
제한 사항
n은 2 이상 100,000 이하인 자연수입니다.
입출력 예
n return
3 2
5 5
입출력 예 설명
피보나치수는 0번째부터 0, 1, 1, 2, 3, 5, ... 와 같이 이어집니다.
우선 이 문제의 경우, 쉽게 작성할 수 있다고 생각하고 진행을 했었는데, 그냥 막연하게 F[i] = F[i-1] + F[i-2]로 계산을 진행했습니다!
하나의 반복문으로 작성을 해서 코드를 구현해보았습니다.
function solution(n) {
var arr = [0, 1]
for (var i = 2; i <= n; i++) {
arr[i] = (arr[i - 1]) + (arr[i - 2])
}
return arr.pop() % 1234567
}
근데 엥..?
??????? 이게 뭐야 이거 아니야?? 라고 생각을 했는데.. 혹시 뭔가 놓치고 있는게 아닌가? 하며 문제를 다시 읽어보니 'n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수' 라는게 눈에 띄었습니다..
혹시, 숫자가 너무 커서 그런가? 싶어서 a % n + b % n = (a + b) % n 을 사용해서 먼저 배열에 %를 한 값을 넣어보자 라는 생각을 하게 되었고 수정한 소스는 다음과 같습니다.
function solution(n) {
var arr = [0, 1]
for (var i = 2; i <= n; i++) {
arr[i] = (arr[i - 1] % 1234567) + (arr[i - 2] % 1234567)
}
return arr.pop() % 1234567
}
이렇게 하니까.. 너무나 잘되는 것..
다시한번 문제를 잘 읽어보자.. 라는 교훈을 얻을 수 있었따....
너무 어려운 코딩테스트..