반응형
사이트명 : 프로그래머스(Programmers)
문제명 : 피보나치 수
언어 : 자바(Java)
일단 피보나치 수를 풀기에 앞서서 문제 개념을 좀 알고 넘어가야 하는데
n은 항상 2 이상으로 들어오며
F(0) -> 0 F(1) -> 1 고정이다
F(2) -> F(0) + F(1) = 0 + 1
F(3) -> F(1) + F(2) = 1 + 1
....
이런 식으로 이어진다
n 값이 10이라면 F(8) + F(9)를 해서 주면 되는 것이다
여기에 함정이
문제 설명을 이상하게 해놔서
정답을 제대로 뽑아내려면
만약 n이 10일 경우
(F(8) % 1234567) + (F(9) % 1234567)
F(n) 값도 % 1234567을 해서 return 시켜야 한다
내 풀이방법은 아래와 같은데
일단 F(n)을 구하려면
F(n-2) + F(n-1) 을 해주면 된다는 것을 깨달은 순간
for 문을 돌리면서 1부터 n까지의 피보나치 수를 계속 구해주면 된다
여기에 %1234567 을 계속 해줘야 테스트 7번부터 틀리지 않고 옳게 처리되는데
문제 설명을 이상하게 해놔서
대부분은 맨 마지막에만 % 1234567을 했을 것이다
그 전의 피보나치 수를 구하는 과정에도 % 1234567을 해줘야 했는데
유의해서 풀어야 한다는 개뿔
문제를 저렇게 써놓으면 전 과정에 %1234567이 들어가는지 어떻게 알겠나
마지막으로 프로그래머스에 바로 적용 가능한 코드는 아래와 같다
class Solution {
public int solution(int n) {
int arr[] = new int[n];
for(int i = 0; i<n; i++) {
if(i == 0) {
arr[i] = 0;
} else if(i == 1) {
arr[i] = 1;
} else {
arr[i] = (arr[i-2] % 1234567) + (arr[i-1] % 1234567);
}
}
int answer = ( arr[n-1] + arr[n-2] ) % 1234567;
return answer;
}
}
반응형
'Language > 알고리즘 문제풀이' 카테고리의 다른 글
프로그래머스 전화번호 목록 자바 문제풀이 (0) | 2021.10.29 |
---|---|
프로그래머스 완주하지 못한 선수 자바 문제풀이 (0) | 2021.10.28 |
프로그래머스 짝지어 제거하기(Java) (0) | 2019.10.16 |
프로그래머스 N개의 최소공배수(Java) (0) | 2019.09.29 |
프로그래머스 폰켓몬(Java) (0) | 2019.09.29 |
댓글