s_y_130
About SY
s_y_130
전체 방문자
오늘
어제
  • 분류 전체보기 N
    • JAVA
      • 더 자바 8
      • JAVA
      • JAVA (JVM)
    • Computer Science
      • CS Basic
      • OOP
      • Design Pattern
      • Network
      • HTTP
      • WEB
      • OS
    • DataBase
      • DB theory
      • MySQL
      • Redis
    • Collection Framework
      • 구현
    • Data Structure
      • Linear
      • Non-Linear
    • Algorithm
      • Basic
      • 응용
      • 완전 탐색(Brute Force)
      • 다익스트라
      • Algorithm Problem
    • Spring
      • 스프링 핵심 원리 - 기본편
      • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
      • 스프링 MVC 2편 - 백엔드 웹 개발 핵심 기술
      • 스프링 DB 1편 - 데이터 접근 핵심 원리
      • 스프링 DB 2편 - 데이터 접근 활용 기술
      • 스프링 핵심 원리 - 고급편
      • 스프링 부트 - 핵심 원리와 활용
      • 재고시스템으로 알아보는 동시성이슈 해결방법
      • 개념
      • 테스트
      • Annotation
      • Error Log
    • TEST
      • 부하 테스트
      • Practical Testing: 실용적인 테스트..
    • JPA
      • 자바 ORM 표준 JPA 프로그래밍
      • 1편- 실전! 스프링 부트와 JPA 활용
      • 2편- 실전! 스프링 부트와 JPA 활용
      • 실전! 스프링 데이터 JPA
      • 실전! Querydsl
      • 개념
    • 백엔드 부트캠프[사전캠프] N
      • TIL N
      • 문제풀이
    • Open Source
    • Book Study
      • Morden Java in Action
      • Real MySQL 8.0 Vol.1
      • TDD : By Example
    • AWS
      • EC2
    • git
    • AI
      • Machine Learning
      • Deep Learning
      • TensorFlow
      • PyTorch
      • YOLO
      • Data Analysis
      • Ai code Error
      • Numpy
    • MY
    • WEB
      • Django
      • WEB 개념
      • React
      • Maven
    • Python
    • 기초수학

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
s_y_130

About SY

나머지 연산의 성질 - 피보나치
기초수학

나머지 연산의 성질 - 피보나치

2022. 10. 5. 20:44

7~14번 테스트 케이스에서 "실패" OR "signal: illegal instruction (core dumped)"

🔎 이렇게 푸셨나요?

% 1234567를 딱 한 번만 하셨나요?
오버플로우가 난 게 아닌가 의심돼요!

🚨이런 문제가 있어요

n이 매우 큰 경우 n번째 피보나치 수는 언어가 표현할 수 있는 자료형의 범위를 넘어가, 오버플로우가 납니다.

예를 들어

  • 47번째 피보나치 수는 2,971,215,073이고, 이 수는 32비트 정수(ex. int) 범위를 넘어 오버플로우가 발생합니다.
  • 100,000번째 피보나치 수는 자릿수가 20,000을 넘어가며, 이는 64비트 정수(ex. long) 범위를 넘어 오버플로우가 발생합니다.

💡그럼 코드를 어떻게 바꾸면 좋나요?

모든 단계에서 % 연산을 사용하여, 모든 연산에서 오버플로우가 일어나지 않게 만들어 주세요.

🔖TIP [나머지 연산의 성질]

나머지 연산은 다음과 같은 특징을 갖고 있습니다

(a + b) % m = ((a % m) + (b % m)) % m

이를 문제에 적용하면 다음과 같습니다

F(n) % m 
= (F(n-1) + F(n-2)) % m
= (F(n-1) % m + F(n-2) % m) % m

 

 

 

참고)

https://school.programmers.co.kr/learn/courses/14743/lessons/116435

    '기초수학' 카테고리의 다른 글
    • 길이가 같은 두 배열의 요소끼리 곱하고 더할 때의 최솟값
    • 최대 공약수와 유클리드 호제법 그리고 최소공배수
    s_y_130
    s_y_130

    티스토리툴바