[C] 백준 2748 - 피보나치 수2 | BaekJoon

2023. 8. 2. 05:28· C/BaekJoon
목차
  1. 문제
  2. 입력
  3. 출력
  4. 예제 입력 1
  5. 예제 출력 1
  6. 예상 풀이 방법
  7. 1차 코드
  8. 1차 결과
  9. 1차 진단
  10. 2차 코드
  11. 2차 결과
  12. 미흡했던 점
  13. 개선 방안

문제

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다.

이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다.

n=17일때 까지 피보나치 수를 써보면 다음과 같다.

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597

n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 n이 주어진다. n은 90보다 작거나 같은 자연수이다.

출력

첫째 줄에 n번째 피보나치 수를 출력한다.

예제 입력 1

10

예제 출력 1

55

예상 풀이 방법

솔직히 똑같은 문제인데 두 번 들어갔다고 생각하고 풀이 방법도 적기 전에 2747번 문제의 정답을 그대로 가져와서 썼다.

1차 코드

#include <stdio.h>

int main() {
    int a = 0;
    int b = 1;
    int answer;
    int n;
    scanf("%d", &n);

    // 일단 계산하기 까다로운 피보나치 수열의 1번째와 2번째를 예외처리
    // 2보다 작을 경우
    if (n < 2) {
        // 인데 0일 경우
        if (n == 0) {
            printf("0");
        }
        // 인데 1일 경우
        else {
            printf("1");
        }
    }

    else {
        for (int i = 1; i < n; i++) {
            answer = a + b;
            a = b;
            b = answer;
        }
        printf("%d", answer);
    }
    return 0;
}

1차 결과

1차 진단

안풀려서 조금 충격이었다.
하지만 어디까지나 피보나치 수를 사용하는 문제라면 일단 알고리즘에 문제는 없을 것으로 판단하고
다른 문제점을 찾기로 했다.

왜 2747번은 잘 풀렸으면서 2748번은 안풀리는지 차이점을 중점으로 비교했다.

문제 조건만 다르고 구성은 똑같았다.

2747번은 최대 45까지.
2748번(지금)은 최대 90번까지이다.

피보나치 수열이 90번대까지 가면 수가 많이 커진다. 아무래도 이전 수의 합이 되다보니 프로그램도 커진다.

그럼 답은 long long int밖에 없다고 본다.

2차 코드

#include <stdio.h>

int main() {
    long long int a = 0;
    long long int b = 1;
    long long int answer;
    int n;
    scanf("%d", &n);

    if (n < 2) {
        if (n == 0) {
            printf("0");
        }
        else {
            printf("1");
        }
    }

    else {
        for (int i = 1; i < n; i++) {
            answer = a + b;
            a = b;
            b = answer;
        }
        printf("%lld", answer);
    }
    return 0;
}

2차 결과

미흡했던 점

문제 조건 제대로 안읽고 좋다고 복붙하고 시작한 점
사이즈에 대한 지식 부족

개선 방안

사이즈와 그에 따른 수 가용 범위 암기 (혹은 이해) 필요

저작자표시 (새창열림)

'C > BaekJoon' 카테고리의 다른 글

[C] 백준 10250 - ACM호텔 | BaekJoon  (0) 2023.08.03
[C] 백준 9610 - 사분면 | BaekJoon  (0) 2023.08.02
[C] 백준 2747 - 피보나치 수 | BaekJoon  (0) 2023.08.02
[C] 백준 1977 - 완전제곱수 | BaekJoon  (0) 2023.08.01
[C] 백준 2920 - 음계 | BaekJoon  (0) 2023.07.28
  1. 문제
  2. 입력
  3. 출력
  4. 예제 입력 1
  5. 예제 출력 1
  6. 예상 풀이 방법
  7. 1차 코드
  8. 1차 결과
  9. 1차 진단
  10. 2차 코드
  11. 2차 결과
  12. 미흡했던 점
  13. 개선 방안
'C/BaekJoon' 카테고리의 다른 글
  • [C] 백준 10250 - ACM호텔 | BaekJoon
  • [C] 백준 9610 - 사분면 | BaekJoon
  • [C] 백준 2747 - 피보나치 수 | BaekJoon
  • [C] 백준 1977 - 완전제곱수 | BaekJoon
sngsp
sngsp
야구돌이 집사의 코딩 그리기
sngsp
[Sngsp] Coding Drawing
sngsp
전체
오늘
어제
  • 분류 전체보기 (90)
    • C (12)
      • BaekJoon (12)
    • iOS (78)
      • Programmers (48)
      • Allen Swift School (1)
      • TIL (Today I Learned) (29)

블로그 메뉴

  • 홈
  • C
  • Swift

공지사항

인기 글

태그

  • 백준
  • 문법
  • 프로그래머스
  • baekjoon
  • 엑스코드
  • 코딩
  • 애플
  • 알고리즘
  • 공부
  • 개발
  • Programmers
  • ios
  • XCode
  • UIkit
  • 개발자
  • c언어
  • 스위프트
  • Swift
  • algorithm
  • til

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
sngsp
[C] 백준 2748 - 피보나치 수2 | BaekJoon
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.