일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 개발일기
- 개발공부
- 엘리스
- 부트캠프
- 자바스크립트 날씨
- reactnativecli
- leetcode
- 코드스테이츠
- 프론트개발
- 자바스크립트 날씨 웹 만들기
- [파이썬 실습] 기초 문제
- 간단한 날씨 웹 만들기
- 엘리스 ai 트랙
- JavaScript
- 코딩부트캠프
- 리트코드
- 자바스크립트
- 자바스크립트 sort()
- 자바스크립트 reduce()
- 자바스크립트 split()
- 삼항연산자
- 날씨 웹 만들기
- HTML
- [AI 5기] 연습 문제집
- RN 프로젝트
- 프로그래머스
- [파이썬 실습] 중급 문제
- [파이썬 실습] 심화 문제
- 엘리스 AI 트랙 5기
- 프론트개발공부
- Today
- Total
개발조각
[프로그래머스] 피보나치 수 본문
이번 문제는 쉬운데 제가 문제를 정확하게 안 읽어서 또 삽질했던 문제입니다.😂
피보나치 수가 뭔지 알아서 문제 자체는 쉽게 이해했거든요.
근데 여기서 단순히 피보나치 수를 조건에 맞게 구해야됩니다.!!
그 조건이 뭔지에 대해는 아래에서 설명하겠습니다.
오늘의 교훈
문제 설명을 제대로 읽자!!
접근방법
피보나치 수 설명을 보면
- 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)의 값이 리턴하게 됩니다.
프로그래머스 피보나치 수 해결방안 설명은 여기까지입니다.
'알고리즘🅰 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 땅따먹기 (0) | 2022.04.27 |
---|---|
[프로그래머스] k진수에서 소수 개수 구하기 (0) | 2022.04.25 |
[프로그래머스] 숫자의 표현 (0) | 2022.04.22 |
[프로그래머스] 주차 요금 계산 (0) | 2022.04.22 |
[프로그래머스] 이진 변환 반복하기 (0) | 2022.04.21 |