개발조각

[프로그래머스] 피보나치 수 본문

알고리즘🅰/프로그래머스

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

개발조각 2022. 4. 25. 11:19
728x90
반응형

이번 문제는 쉬운데 제가 문제를 정확하게 안 읽어서 또 삽질했던 문제입니다.😂

피보나치 수가 뭔지 알아서 문제 자체는 쉽게 이해했거든요.

근데 여기서 단순히 피보나치 수를 조건에 맞게 구해야됩니다.!!

그 조건이 뭔지에 대해는 아래에서 설명하겠습니다.

 

오늘의 교훈
문제 설명을 제대로 읽자!!

 


접근방법

피보나치 수 설명을 보면

  • 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

이걸 보시면 F(n) = F(n-2) + F(n-1) 인걸 알 수 있고

F(n)를 구하기 위해는 F(0), F(1)은 있으니까 F(2) ~ F(n-1)를 구하면 됩니다.

 

저는 어떻게 풀었다면,

빈 배열에 F(0), F(1)의 값을 넣고

반복문으로 F(2)~F(n)을 구해서 앞에서 F(0), F(1)의 값을 넣은 배열 안에다가 넣어주고

만약 F(5)를 원하면 피보나치 수를 넣은 배열[5]을 써주면 F(5)의 값이 나오겠죠?

 

여기서 주의할 점은 문제 설명을 보시면

  • 2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요.

이 조건을 꼭!!!!!!!!!!! 넣어야 됩니다.


해결방안

function solution(n) {
    let fbncArr = [0, 1]
    
    for(let i=2; i<=n; i++){
        let fbnc = (fbncArr[i-1] + fbncArr[i-2])%1234567;
        fbncArr.push(fbnc);
    }
    return fbncArr[n];
}

접근방법에서 설명했던 그대로 코드를 짜면 이렇게 됩니다.

 

해결방안 순서

fbncArr배열에 F(0), F(1) 넣기

for문으로 F(2) ~ F(n)까지의 값을 fbncArr배열에 넣기

fbncArr[n]의 값을 리턴한다.

 

 

 

1단계. fbncArr배열에 F(0), F(1) 넣기

let fbncArr = [0, 1]

피보나치 수에서 F(0)=0, F(1)=1이라는 수를 미리 지정을 해줍니다.

그러므로 F(0), F(1)를 구할 필요가 없습니다.

그래서 미리 fbncArr배열 안에 F(0), F(1)의 값을 넣어 주었습니다.

 

 

2단계. for문으로 F(2) ~ F(n)까지의 값을 fbncArr배열에 넣기

for(let i=2; i<=n; i++){
    let fbnc = (fbncArr[i-1] + fbncArr[i-2])%1234567;
    fbncArr.push(fbnc);
}

1단계에서 fboncArr에 F(0), F(1)의 값을 넣어주었으니

for문에서는 F(2)~F(n)의 값을 넣어주면 됩니다.

그래서 for문에서 i=2; i<=n;을 넣어주었습니다.

 

피보나치를 구하는 방법은 F(n) = F(n-2) + F(n-1)입니다.

이 식을 그대로 넣으면 fbncArr[i-1] + fbncArr[i-2]이 됩니다.

그러나 이 문제에서는 조건이 있습니다.

 

"2 이상의 n이 입력되었을 때, 

n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요."

 

이 조건을 만족시켜야 됩니다.

 

지금 쓴 코드를 보면

2 이상의 n이 입력되었을 때

for(let i=2; i<=n; i++)

현재 코드에서 for문에서 F(2)~F(n)까지만 반복함으로 조건에 맞음

 

n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수

let fbnc = (fbncArr[i-1] + fbncArr[i-2])%1234567;

위의 조건을 만족하려면 피보나치 구하는 식%1234567을 넣어주면 됩니다.

 

 

3단계. fbncArr [n]의 값을 리턴한다.

return fbncArr[n];

마지막으로 F(0)~F(n)까지의 값을 fbncArr배열에 담았으므로

return fbncArr[n];을 하면 F(n)의 값이 리턴하게 됩니다.


프로그래머스 피보나치 수 해결방안 설명은 여기까지입니다.

728x90
반응형
Comments