이건 그냥 내가 이해가 되지 않아서 기록하는 것이다.
피보나치의 수 https://school.programmers.co.kr/learn/courses/30/lessons/12945
이 문제에 나는 피보나치 수를 구하고 그것을 1234567로 나누면 되겠다 라고 생각을 해서
function solution(n) {
let arr = [0, 1]
for (i = 2; i <= n; i++) {
arr[i] = arr[i - 2] + arr[i - 1]
}
return arr[n] % 1234567;
}
이렇게 했는데 정답이 아니었다. 이게 왜? 라는 의문이 해결되지 않아
다른 정답을 보니
function solution2(n) {
let fib = [0, 1];
for (let i = 2; i <= n; i++) {
// 이렇게하면 피보나치 수열 자체가 틀려지는데
fib[i] = (fib[i - 1] + fib[i - 2]) % 1234567;
}
return fib[n];
}
비슷해보이지만 큰 차이가 있다.
나는 피보나치 수를 구한 다음에 주어진 숫자를 나눴는데 정답은 수를 구하면서 나눠준다.
이러면 피보나치 수가 1234567을 넘는 순간 그 다음부터 값이 달라진다.
그래서 정답은 피보나치 수는 아니고 그 방식을 가져와서 어떤 숫자를 구하고 나눈 나머지값이라는 것인데 아직도 내가 문제를 잘못이해한 것인지 모르겠다.
2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요.
계속 나눠주면서 계산하란 말도 없고 그러면 피보나치 수가 맞나? 아무튼 이런 문제도 있었다는 것을 남겨둔다. 문제에 접근 자체는 잘한 것 같다.
'오늘 뭐했냐 > 기억하면 좋을 문제들' 카테고리의 다른 글
구명보트 (0) | 2023.10.21 |
---|---|
영어 끝말잇기 (0) | 2023.10.17 |
올바른 괄호 (0) | 2023.10.17 |
sort() 활용 (0) | 2023.06.28 |
스택을 사용하는 문제 (0) | 2023.06.25 |