Problem Solving/프로그래머스

[프로그래머스/JavaScript] 피보나치 수

세고래 2022. 11. 4. 17:48

https://school.programmers.co.kr/learn/courses/30/lessons/12945

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


1) 풀이

문제 자체는 어렵지 않은데, 자꾸 오답이 나와서 프로그래머스 질문하기 를 이용했던 문제이다

피보나치 하면 재귀함수로 구현하는 것이 제일 먼저 생각나서,

나도 처음에는 재귀함수로 풀었었는데 시간초과와 런타임에러가 나서 for문을 이용하여 각각의 값을 계산해

배열에 넣어주는 방식으로 바꿨다

 

코드 실행하기를 누르면 전부 정답이고, 제출했을 때도 6번까지는 맞는데 왜 7번부터 오답이 나는지 이해가 가지 않았다

방식자체도 이것보다 더 나은 방식을 생각해내진 못하겠는데.. 라고 생각이 들어 '질문하기'란을 살펴보고 이해를 했다!

출처: 프로그래머스 - 피보나치 수 '질문하기' 中 이준희님 답변

이번에 새롭게 알게 된 사실! (A+B)%C=((A%C)+(B%C))%C 의 성질이 있다는 것이다

그래서 바로 적용해봤더니, 정답이 나왔다! 앞으로도 이 사실을 이용하여 문제를 풀면 유용할듯.. 🙄

2) 최종 소스코드
function solution(n) {
  const arr = [];
  arr[0] = 0;
  arr[1] = 1;
  for (let i = 2; i <= n; i++) {
    arr.push((arr[i - 2] + arr[i - 1]) % 1234567);
  }

  return Math.floor(arr[n] % 1234567);
}
3) 참고자료

https://school.programmers.co.kr/questions/11991

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

728x90