ballqs 님의 블로그
TIL - 2024년 07월 19일 공부한 내용 정리하기(int long BigInteger) 본문
1.오늘 배운 것
아무래도 개인학습조에 속해있다보니 거의 많은 시간을 코딩문제에 부딪혀가면서 모자란 부분을 배워가는건 오늘이 마지막이 아닌가 싶다. 오늘 배운것은 프로그래머스 코딩 문제인 피보나치 문제를 풀면서 부딪힌 문제였다.
주어진 조건이 n의 값이 2이상 100,000 이하인 자연수다보니 수가 말도 안되게 커지면서 용량 초과로 에러난 것이기에 여러 자료형을 조사하게 되었다.
2.문제 풀어나가는 과정
피보나치는 기본적인 개념은 알고 있었다.
첫째 및 둘째 항이 1이며 그 뒤의 모든 항은 바로 앞 두 항의 합인 수열이다.
F(0) + F(1) = F(2) 0 + 1 = 1
F(1) + F(2) = F(3) 1 + 1 = 2
F(2) + F(3) = F(4) 1 + 2 = 3
F(3) + F(4) = F(5) 2 + 3 = 5
해당 문제를 읽어보면 이러한 조건이 있다.
※n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴
위의 조건으로 아래와 같이 진행 했으나
return answer % 1234567;
데이터 범위 문제에 부딪혔다.
int 로 진행하다가 long 타입으로 바꿔서 시도해보고 그럼에도 안되어서 BigInteger로 바꿔서 시도를 했다.
BigInteger로 가능 했던 이유는 데이터 범위가 무한이라서 가능했다.
해당 정리글은 따로 게시글로 작성 해두었다!.
그러나 알고보니 "% 1234567" 이부분이 잘못들어가 있었다.
for (int i = 1; i < n; i++) {
num3 = (num1 + num2) % 1234567;
num1 = num2;
num2 = num3;
}
계산하는 동시에 처리를 했으면 그런 문제는 데이터범위문제는 일어나지 않았고 그대로 해결했다.
해당 문제는 노션으로 제대로 정리 해두었다.
3.해당 개념이 중요한 이유
앞으로 데이터 범위때매 생기는 문제는 오늘 배운 내용들로 해결해나가지 않을까 싶다.
다만 BigInteger는 그렇게 사용하지 않을거 같은 이유는 메모리를 많이 먹는 것이 보였기에 사용을 안할 것으로 보인다.
또한 문제를 제대로 읽었더라면 int형으로도 해결이 가능한 점을 보아 시야 좁은건 어떻게 안되나 라는 걱정을 마지막으로 글을 마무리한다.
'내일배움캠프 > Java' 카테고리의 다른 글
TIL - 2024년 08월 02일 - 팀 프로젝트 2일차 (0) | 2024.08.02 |
---|---|
TIL - 2024년 08월 01일 - 팀 프로젝트 시작 (0) | 2024.08.01 |
TIL - 2024년 07월 18일 공부한 내용 정리하기(Set) (0) | 2024.07.18 |
TIL - 2024년 07월 17일 공부한 내용 정리하기(for문 수행순서 , toCharArray , StringBuilder) (0) | 2024.07.17 |
TIL - 2024년 07월 16일 공부한 내용 정리하기(소수 로직, 약수 로직, Integer 비교) (0) | 2024.07.16 |