[백준] 신나는 함수 실행 - java

[백준] 신나는 함수 실행 - java

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringTokenizer st = null; StringBuilder sb = new StringBuilder(); String line = null; while((line = br.readLine()) != null) { if(line.equals("-1 -1 -1")) break; st = new StringTokenizer(line, " "); int a = Integer.parseInt(st.nextToken()); int b = Integer.parseInt(st.nextToken()); int c = Integer.parseInt(st.nextToken()); int ret = w(a, b, c); sb.append("w(").append(a).append(", ").append(b).append(", ").append(c).append(") = ").append(ret).append('

'); } bw.write(sb.toString()); bw.close(); br.close(); } private static int[][][] save = new int[21][21][21]; private static int w(int a, int b, int c) { if(a <= 0 || b <= 0 || c <= 0) return 1; if(a > 20 || b > 20 || c > 20) return 1048576; if(save[a][b][c] != 0) return save[a][b][c]; if(a < b && b < c) { if(save[a][b][c-1] == 0) { save[a][b][c-1] = w(a, b, c-1); } if(save[a][b-1][c-1] == 0) { save[a][b-1][c-1] = w(a, b-1, c-1); } if(save[a][b-1][c] == 0) { save[a][b-1][c] = w(a, b-1, c); } save[a][b][c] = save[a][b][c-1] + save[a][b-1][c-1] - save[a][b-1][c]; return save[a][b][c]; } if(save[a-1][b][c] == 0) { save[a-1][b][c] = w(a-1, b, c); } if(save[a-1][b-1][c] == 0) { save[a-1][b-1][c] = w(a-1, b-1, c); } if(save[a-1][b][c-1] == 0) { save[a-1][b][c-1] = w(a-1, b, c-1); } if(save[a-1][b-1][c-1] == 0) { save[a-1][b-1][c-1] = w(a-1, b-1, c-1); } save[a][b][c] = save[a-1][b][c] + save[a-1][b-1][c] + save[a-1][b][c-1] - save[a-1][b-1][c-1]; return save[a][b][c]; } }

공유하기 글 요소 저작자표시

from http://circus7.tistory.com/26 by ccl(A) rewrite - 2021-11-06 17:27:19