문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/12914
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 핵심
- 효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는
(1칸, 1칸, 1칸, 1칸)
(1칸, 2칸, 1칸)
(1칸, 1칸, 2칸)
(2칸, 1칸, 1칸)
(2칸, 2칸) - 효진이가 끝에 도달하는 방법이 몇 가지인지 알아내, 여기에 1234567를 나눈 나머지를 리턴하는 함수, solution을 완성하세요
알고리즘
-피보나치수열이용
코드
public static BigInteger solution(int n) {
BigInteger answer = BigInteger.valueOf(0);
int index=0;
BigInteger[] arr=new BigInteger[2];
arr[0]=BigInteger.valueOf(0);
arr[1]=BigInteger.valueOf(1);
while (index<n) {
answer=arr[0].add(arr[1]);
arr[0]=arr[1];
arr[1]=answer;
index+=1;
}
answer = answer.mod(BigInteger.valueOf(1234567));
System.out.println(answer);
return answer;
}
결과

gpt피드백
-네 알고리즘 자체는 정확해.
피보나치를:
현재 = 이전 두 값의 합
으로 n번 계산하니까 반복 횟수 기준으로는 **O(n)**이고, 이 문제에서 충분히 좋은 접근이야.
문제는 원본 피보나치 숫자를 요구하지 않고 나머지만 요구한다는 거야.
그러면 아래공식 :
(a + b) % M
=
((a % M) + (b % M)) % M
을 이용해서 매번 나머지만 저장하는 게 더 효율적이야.
answer = (arr[0] + arr[1]) % 1234567;
그러면 숫자가 절대 커지지 않아.
배운점느낀점
-처음에 딱보고 헐 dfs? 써야하나 하고
고민 했던 문제 였다 근데 그냥 혹시
결과가 소수들만 있나 해서 12345 해보니
12358? 더해보니 1321 ?? 이거 피보나치 수열이잖아?
이게 보였다 그래서 어이없게 쉽게 풀었다
'코테 > lvl2' 카테고리의 다른 글
| 프로그래머스 2 x n 타일링(lvl2) 풀어보기 (0) | 2026.09.28 |
|---|---|
| 프로그래머스 땅따먹기(lv2) 풀어보기 (0) | 2026.09.28 |
| 프로그래머스 N개의 최소공배수(lvl2) 풀어보기 (0) | 2026.09.26 |
| 프로그래머스 마법의 엘리베이터(lvl2) 풀어보기 (0) | 2026.09.26 |
| 프로그래머스 호텔 대실(lvl2) 풀어보기 (0) | 2026.09.17 |