코테/백준

[백준/JAVA] 9184번: 신나는 함수 실행

imname1am 2023. 5. 30. 16:26
반응형

🔺 문제

 

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(202020);
        }
        
        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

 

반응형