Coding 01

백준[9184]번 : 신나는 함수 실행 ( JAVA ) 본문

백준

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

하루우울루 2023. 7. 29. 18:08

https://www.acmicpc.net/problem/9184

 

9184번: 신나는 함수 실행

입력은 세 정수 a, b, c로 이루어져 있으며, 한 줄에 하나씩 주어진다. 입력의 마지막은 -1 -1 -1로 나타내며, 세 정수가 모두 -1인 경우는 입력의 마지막을 제외하면 없다.

www.acmicpc.net


Code

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {
	
	static int w(int[][][] arr,int a,int b,int c) {
		for(int i=0;i<=a;i++) {
			for(int j=0;j<=b;j++) {
				for(int k=0;k<=c;k++) {
					if(i == 0 || j == 0 || k == 0) {
						arr[i][j][k] = 1;
					}
					else if(i < j && j < k) {
						arr[i][j][k] = arr[i][j][k-1] + arr[i][j-1][k-1] - arr[i][j-1][k];
					}
					else {
						arr[i][j][k] = arr[i-1][j][k] + arr[i-1][j-1][k] + arr[i-1][j][k-1] - arr[i-1][j-1][k-1];
					}
					
				}
			}
		}
		return arr[a][b][c];
	}
	
	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int[][][] arr = new int[21][21][21]; 
        // 조건에 따라 20보다 크면 w(20,20,20)을 반환하기에 배열 크기 초기화
		
		w(arr,20,20,20);
		
		while(true) { // -1,-1,-1 일 경우 반복문 종료
			
			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;
			}
			
			bw.write(String.format("w"+"("+"%d,"+" %d,"+" %d"+") = ",a,b,c)); 
			// String.format으로 출력 형식을 정할 수 있다.
            
			if(a <= 0 || b <= 0 || c <=0) {
				bw.write(1+"\n");
				continue; // 다시 반복문의 처음으로 이동
			}
			if(a > 20 || b > 20 || c > 20) { 
				a = 20;
				b = 20;
				c = 20;
			}
			
			bw.write(arr[a][b][c]+"\n");
		}
		
		br.close();
		bw.close();
	}
	
	
}

계속해서 문제가 틀려서 결국 다른 사람의 코드를 보고 코드를 완성했다.

 

이런 건 항상 다른 사람 코드 보면 쉽게 느껴진다.

문제 조건을 잘 생각하고 반복되는 부분이 어디인지 생각을 잘해야 되겠다고 느꼈다.