티스토리 뷰
아래와 같은 문제를 풀 경우 메모이제이션 기법을 활용하자
메모이제이션이란 이미 확인한 값이 있다면 더이상 자식 노드를 생성하지 않고 해당 값을 사용하여 불필요한 경우의 수를 고려하지 않아도 되는 기법이다.

아래 전체 코드를 보며 메모이제이션 성능을 확인하고자 한다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
class Main {
static int[][] visited;
static int n , r ;
public static int dfs(int n, int r){
if (n == r || r == 0) return 1;
else{
return dfs(n-1,r-1)+dfs(n-1,r);
}
}
public static int dfs_memo(int n, int r) {
if (visited[n][r] > 0) return visited[n][r];
if (n == r || r == 0) return 1;
else{
return visited[n][r] = dfs_memo(n-1,r-1)+dfs_memo(n-1,r);
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
r = Integer.parseInt(st.nextToken());
visited = new int[35][35]; // 요구사항
long beforeTime = System.currentTimeMillis();
System.out.println("dfs: " + dfs(n,r));
long afterTime = System.currentTimeMillis();
long time = (afterTime-beforeTime);
System.out.println("[메모이제이션 전]dfs 수행 시간: " + time + "ms");
long memo_beforeTime = System.currentTimeMillis();
System.out.println("dfs with memo: " + dfs_memo(n,r));
long memo_afterTime = System.currentTimeMillis();
long memo_time = (memo_afterTime-memo_beforeTime);
System.out.println("[메모이제이션 후]dfs 수행 시간: " + memo_time + "ms");
}
}
시간 차이를 명확히 비교 하기 위해 input으로 33 19의 값을 넣었다. 결과는 아래와 같다.

명확한 성능 차이를 보인다.
'알고리즘' 카테고리의 다른 글
백준 2178) 미로탐색 자바 Java (1) | 2025.01.29 |
---|---|
백준 21610) 마법사 상어와 비바라기 자바 Java (0) | 2025.01.10 |
java) 부분 집합 문제 DFS로 해결하기 (0) | 2024.12.22 |
백준 1753) 최단경로 Java 풀이 (0) | 2024.08.15 |
[99클럽 1기 7일차] 프로그래머스 > 햄버거 만들기 Java (0) | 2024.04.01 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 무중단배포
- 쿠버네티스 오브젝트
- 백준 상자 넣기 자바
- StatefulSet
- 프로그래머스
- 백준 1965 풀이
- EB
- Java #코린이 #자바
- 마법사 상어와 비바라기 자바
- 자료구조
- 쿠버네티스 개념
- 백준 상자넣기
- 구간합구하기
- dfs
- ECR
- 행렬 테두리 회전하기 자바
- 백준
- java
- EC2
- java #스프링 #spring #server
- k8s
- k8s object
- 단지번호붙이기 자바
- 자바
- docker
- Java #객체 #자바기초 #자바
- 코딩테스트
- 단지번호붙이기 JAVA
- 백준 그림 자바
- AWS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함