코딩테스트/알고리즘 문제풀이

[99클럽 코테 스터디 21일차 TIL] 피보나치 수 - Java [자바][프로그래머스]

2024. 8. 11. 12:18
목차
  1. 📜 문제 내용
  2. 🤔 과정
  3. ✨ 최초 제출 답안 - ⏱️ 시간 초과 
  4. ✍️ 재제출 답안
  5. 🔗 문제 링크
728x90
반응형

 

 

 

📜 문제 내용

 

🤔 과정

  • fibo[n] = fibo[n - 1] + fibo[n - 2] 를 이용한다. 

 

✨ 최초 제출 답안 - ⏱️ 시간 초과 

class Solution {
    public static int fibo(int n){
        if(n <= 1) return n;   
        return fibo(n - 1) + fibo(n - 2);
    }
    
    public int solution(int n) {
        int answer = fibo(n);
        return answer;
    }
}

 

 

  • "피보나치 수" 라는 문제명만 보고 바로 작성했는데, 테스크케이스 14개 중 6개만 맞았다. 문제를 다시 읽어보니, n이 최대 10만 이므로 피보나치 수는 20,899자리 수로 너무 큰 값이며, 문제에서 원하는 값은 n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴해야했다. 그래서 코드를 수정했다. 

from chatGPT

 

✍️ 재제출 답안

class Solution {
    public int solution(int n) {
        int[] fibo = new int[n + 1];
        fibo[1] = 1;
        
        for(int i = 2; i < fibo.length; i++){
            fibo[i] = (fibo[i - 1] + fibo[i - 2]) % 1234567;
        }
        
        int answer = fibo[n];
        return answer;
    }
}

 

  • 마지막에 int answer = fibo[n] % 1234567; 으로 하지 않아도 되는 이유는 다음과 같다. 
    1) 모듈러 연산의 특징으로 fibo 배열에 넣을 때부터 1234567로 나눈 나머지만을 넣어도 값은 동일하다. 
    2) 마지막에만 1234567로 나눈 나머지를 처리하면 일단 fibo 배열에 int 자료형을 초과한 너무 큰 값들이 들어간다. 
모듈러 연산의 특성
1. (a + b) % m = ((a % m) + (b % m)) % m
2. (a − b) % m = ((a % m) − (b % m) + m) % m
3. (a × b) % m = ((a % m) × (b % m)) % m
  • 위의 모듈러 연산 특성 1번으로 인해 마지막에 1234567로 나눈 나머지 처리를 해주는 것과 fibo 자체에 나머지 처리한 값을 미리 넣는 것과 동일하게 된다. 
(fibo[n - 1] + fibo[n - 2]) % 1234567 = ((fibo[n - 1] % 1234567) + (fibo[n - 2] % 1234567)) % 1234567

 

🔗 문제 링크

  • 프로그래머스 - 피보나치 수 (링크) 
 

프로그래머스

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

programmers.co.kr

 

728x90
반응형
저작자표시 (새창열림)
  1. 📜 문제 내용
  2. 🤔 과정
  3. ✨ 최초 제출 답안 - ⏱️ 시간 초과 
  4. ✍️ 재제출 답안
  5. 🔗 문제 링크
'코딩테스트/알고리즘 문제풀이' 카테고리의 다른 글
  • [99클럽 코테 스터디 23일차 TIL] 마법의 엘리베이터 - Java [자바][프로그래머스]
  • [99클럽 코테 스터디 22일차 TIL] 멀리 뛰기 - Java [자바][프로그래머스]
  • [99클럽 코테 스터디 20일차 TIL] 큰 수 만들기 - Java [자바][프로그래머스]
  • [99클럽 코테 스터디 19일차 TIL] 구명보트 - Java [자바][프로그래머스]
bonkri
bonkri
Swimming through the sea of ​​information
bonkri
Bon_chive
bonkri
전체
오늘
어제
Bonkri's GitHub
  • 분류 전체보기
    • 일상 기록
    • SSAFY
      • TENsion UP 10기!
      • SSAFYcial
    • 프로그래밍 언어
      • Java
    • IT 자격증
    • 코딩테스트
      • TIL
      • 유형별 개념
      • 알고리즘 문제풀이
반응형
250x250

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
bonkri
[99클럽 코테 스터디 21일차 TIL] 피보나치 수 - Java [자바][프로그래머스]
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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