Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- array
- 뒤집은 소수
- ArrayList
- 격자판
- 백준
- 보이는 학생
- 큰 수 출력하기
- 자바
- GitHub #Commit #BaekJoon
- java
- 공통원소 구하기
- 아스키코드
- 투 포인터
- 가장 짧은 문자거리
- 임시반장 정하기
- 10991
- 인프런
- Two Pointer
- 최대 길이
- 두 배열 합치기
- 코테준비
- 10992
- Pointer
- 모든행과열대각선의합
- 점수계산
- 알고리즘
- 배열
- 등수구하기
- 연속부분수열
- 누적 계산
Archives
- Today
- Total
ezhoon
[인프런] 07_04 피보나치 재귀(메모이제이션) 본문
[Java] 인프런 문제풀이/Recursive, Tree, Graph(DFS, BFS 기초)
[인프런] 07_04 피보나치 재귀(메모이제이션)
ezhoon 2022. 2. 12. 13:57📖 문제
- 첫 줄에 피포나치 수열을 출력
- 피포나치 수열을 출력한다. 피보나치 수열이란 앞의 2개의 수를 합하여 다음 숫자가 되는 수열이다.
- 입력은 피보나치 수열의 총 항의 수이다. 만약 7이 입력되면 1 1 2 3 5 8 13을 출력한다.
⚠️ 주의사항
- 재귀함수를 이용 할 것
- 메모이제이션 기법을 활용해 볼 것
✍️ 이해
/**
* 1. N 입력
* 2. DFS에 N값 넘김
* 3. 1이나 2일때는 1 값 리턴
* 4. 그 외에는 N-2 + N-1 즉 N의 왼쪽 값 2개 더하기
* 4-1. 위에 내용으로 끝내도 코드는 돌아가지만 숫자가 커질 수록 너무 많은 양의 수를 재귀
* 4-2. N 번째 값이 이미 0보다 크다면 더 이상 볼 필요 없이 N 번째 값 리턴
* 5. 스택프레임 구조이므로 이전에 풀었던 for문과 속도차이가 많이 남
*/
✏️ 풀이
import java.util.Scanner;
public class Main {
static int[] answer;
public int DFS(int N) {
// 없어도 돌아가지만 속도에서 차이가 엄청나게 남
// 이미 구한 값이 존재하면 그 값을 가져오는거 이므로 "메모이제이션"이라고 불림
if (answer[N] > 0) return answer[N];
if (N == 1 || N == 2) return answer[N] = 1;
else return answer[N] = DFS(N - 2) + DFS(N - 1);
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
answer = new int[N + 1];
T.DFS(N);
for (int i = 1; i <= N; i++) System.out.print(answer[i] + " ");
}
}
2022.01.21 - [[Java] 인프런 문제풀이/Array(배열)] - [인프런] 02_04 피보나치 수열
[인프런] 02_04 피보나치 수열
문제 총 항 수 N만큼의 피보나치 수열 출력 이해 피보나치 수열의 개념이 먼저 필요하다. 피보나치 수열이란? - 앞의 2개의 수를 합하여 다음 숫자가 되는 수열이다. - 만약 7이 입력 된다면 1 + 1 +
ezhoon.tistory.com
위 문제와 똑같은 문제를 for문으로 푼 내용입니다.
하지만 속도는 for > 재귀 입니다.
그 이유는 재귀는 계속 메모리에 스택프레임이 누적되기 때문에 속도차이가 생길 수 밖에 없습니다.
'[Java] 인프런 문제풀이 > Recursive, Tree, Graph(DFS, BFS 기초)' 카테고리의 다른 글
[인프런] 07_07 이진트리 레벨탐색 (0) | 2022.02.14 |
---|---|
[인프런] 07_06 부분집합 구하기(DFS) (0) | 2022.02.13 |
[인프런] 07_05 이진트리순회 (0) | 2022.02.12 |
[인프런] 07-04 팩토리얼 (0) | 2022.02.11 |
[인프런] 07-03 재귀함수를 이용한 이진수 출력 (0) | 2022.02.10 |
Comments