🔺 문제
9184번: 신나는 함수 실행
입력은 세 정수 a, b, c로 이루어져 있으며, 한 줄에 하나씩 주어진다. 입력의 마지막은 -1 -1 -1로 나타내며, 세 정수가 모두 -1인 경우는 입력의 마지막을 제외하면 없다.
www.acmicpc.net
🔺 코드
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
import java.util.*;
import java.io.*;
public class Main {
static int dp[][][] = new int[21][21][21];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
while(true) {
StringTokenizer st = new StringTokenizer(br.readLine()," ");
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
if(a == -1 && b == -1 && c == -1)
break;
sb.append("w(" + a + ", " + b + ", " + c + ") = ").append(w(a, b, c)).append('\n');
}
System.out.println(sb);
}
static int w(int a, int b, int c) {
// 범위를 벗어나지 않으면서 메모이제이션이 되어있는 경우
if(inRange(a, b, c) && dp[a][b][c] != 0) {
return dp[a][b][c];
}
if(a <= 0 || b <= 0 || c <= 0) {
return 1;
}
if(a > 20 || b > 20 || c > 20) {
return dp[20][20][20] = w(20, 20, 20);
}
if(a < b && b < c) {
return dp[a][b][c] = w(a,b,c - 1) + w(a,b-1,c-1) - w(a,b-1,c);
}
return dp[a][b][c] = w(a-1,b,c) + w(a-1,b-1,c) + w(a-1,b,c-1) - w(a-1,b-1,c-1);
}
static boolean inRange(int a, int b, int c) {
return 0 <= a && a <= 20 && 0 <= b && b <= 20 && 0 <= c && c <= 20;
}
}
|
cs |
✅ 해결 아이디어
✔ DP → 메모이제이션
: 이미 구해놓은 값을 배열에 저장해두고, 저장된 값을 불러오는 경우라면 뽑아와서 사용
🔺 다른 풀이들
- 설명 감사합니다..
[백준][JAVA알고리즘]9184번 풀이(신나는 함수 실행) - 초보도 이해하는 풀이
안녕하세요 인포돈 입니다. 백준 알고리즘 9184번 풀이입니다. * 참고사항 - 개발환경은 eclipse을 기준으로 작성되었습니다. - java언어를 이용하여 문제를 풀이합니다. - 알고리즘 문제는 풀이를 보
infodon.tistory.com
💬 느낀 점
오잉 그냥 dp 배열에 값 저장해두기만 하면 되는거였음,,, 모지,,,,
이것이 바로 메모이제이션....
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
[백준] 9184번 : 신나는 함수 실행 - JAVA [자바]
www.acmicpc.net/problem/9184 9184번: 신나는 함수 실행 입력은 세 정수 a, b, c로 이루어져 있으며, 한 줄에 하나씩 주어진다. 입력의 마지막은 -1 -1 -1로 나타내며, 세 정수가 모두 -1인 경우는 입력의 마지
st-lab.tistory.com
[백준 9184 JAVA] 신나는 함수 실행
문제 링크 https://www.acmicpc.net/problem/9184 9184번: 신나는 함수 실행 입력은 세 정수 a, b, c로 이루어져 있으며, 한 줄에 하나씩 주어진다. 입력의 마지막은 -1 -1 -1로 나타내며, 세 정수가 모두 -1인 경
woong-gil.tistory.com
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 9461번: 파도반 수열 (0) | 2023.05.30 |
---|---|
[백준/JAVA] 1904번: 01타일 (1) | 2023.05.30 |
[백준/JAVA] 24416번: 알고리즘 수업 - 피보나치 수 1 (0) | 2023.05.30 |
[백준/JAVA] 1495번: 기타리스트 (0) | 2023.05.30 |
[백준/JAVA] 15989번: 1, 2, 3 더하기 4 (0) | 2023.05.29 |