반응형
🔺 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🔺 코드
- 틀림
import java.util.*;
class Solution {
public int solution(int n) {
int answer = 0;
answer = Fibb(n) % 1234567;
return answer;
}
public int Fibb(int n) {
if(n == 0) return 0;
else if(n == 1) return 1;
else return Fibb(n - 1) + Fibb(n - 2);
}
}
재귀함수를 사용하려고 했는데 시간 초과가 떴다.
- 정답
import java.util.*;
class Solution {
public int solution(int n) {
int[] dp = new int[n + 1];
dp[0] = 0;
dp[1] = 1;
for(int i = 2 ; i <= n ; i++) {
dp[i] = (dp[i - 1] + dp[i - 2]) % 1234567;
}
return dp[n];
}
}
✅ 해결 아이디어
- 동적 계획법 (Dynamic Programming) - 이미 계산한 값을 재활용함으로써, 중복 계산 피하고 계산 속도 향상
- 배열 사용.
🔺 다른 풀이들
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
class Solution {
public int solution(int n) {
int answer = 1;
int f1 = 0, f2 = 1;
for(int i = 2; i <= n; i++){
answer = (f1 + f2) % 1234567;
f1 = f2;
f2 = answer;
}
return answer;
}
}
💬 느낀 점
이게 DP구나...!!!
아무 생각 없이 재귀 함수를 사용하면 안 되겠다.
(참고)
✔ 테스트 케이스 7 ~ 14 실패하는 이유
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
반응형
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Lv. 1] 키패드 누르기 (0) | 2023.04.09 |
---|---|
[프로그래머스/Lv. 2] 구명보트 (0) | 2023.04.09 |
[MySQL/Lv.2] GROUP BY (0) | 2023.04.07 |
[MySQL] SUM, MAX, MIN (0) | 2023.04.06 |
[MySQL] IS NULL (0) | 2023.04.05 |