J

[JAVA] BOJ ๋ฐฑ์ค€ 4811 ์•Œ์•ฝ ๋ณธ๋ฌธ

๐Ÿ”‘ Problem Solving/๐Ÿ‡ BOJ

[JAVA] BOJ ๋ฐฑ์ค€ 4811 ์•Œ์•ฝ

snowball๐Ÿฐ 2023. 3. 28. 14:23

๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ์ด์ฐจ์› ๋ฐฐ์—ด์— ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ์ œ์ด์…˜ ํ•  ๊ฒƒ์ด๋‹ค! → ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ด๋ฏ€๋กœ ๊ฐ’์„ ์ตœ๋Œ€๊ฐ’์ธ 30(N์˜ ์ตœ๋Œ€๊ฐ’)๊นŒ์ง€๋กœ ์„ ์–ธํ•ด์ค€ ๋’ค ๋‹ค๊ฐ™์ด ๊ฐ’์„ ๊ณต์œ ํ•˜๊ฒŒ ํ•œ๋‹ค.
  2. d[i][j]๋Š” ํ•œ ์•Œ์„ i๊ฐœ, ๋ฐ˜ ์•Œ์„ j๊ฐœ ๋จน๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜์ด๋‹ค. → ์ฆ‰ W i๊ฐœ, H j๊ฐœ๋ฅผ ๊ฐ€์ง€๊ณ  ๋งŒ๋“  i+j๋ฌธ์ž์—ด์ด๋‹ค.
  3. ์ด๋•Œ j๋Š” i๋ณด๋‹ค ํด ์ˆ˜๋Š” ์—†๋‹ค. → ํ•œ ์•Œ์„ ๋จน์€ ํ›„ ๋ฐ˜ ์•Œ์ด ์ƒ๊ธฐ๊ธฐ ๋•Œ๋ฌธ
  4. ์ด์ค‘ for๋ฌธ์„ ํ†ตํ•ด ๊ฐ’์„ ์•„์ง ๋ชจ๋ฅด๋Š” ๊ฒƒ์€ -1๋กœ ๋ถˆ๊ฐ€๋Šฅ ํ•œ ๊ฐ’๋“ค์€ 0์œผ๋กœ ํ‘œ๊ธฐํ•˜์˜€๋‹ค.
  5. d[0][0] = 1๋กœ ๋‘์–ด ์ดˆ๊ธฐ๊ฐ’์„ ์ค€๋‹ค. d[1][0] = 1๋กœ ์ฃผ์–ด๋„ ๋œ๋‹ค.
  6. d[i][j] = d[i-1][j] + d[i][j]์™€ ๊ฐ™๋‹ค. ์ด๋•Œ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ’๋“ค์€ ์•ž์—์„œ 0์œผ๋กœ ์„ธํŒ…์„ ํ•ด์คฌ๊ธฐ ๋•Œ๋ฌธ์— ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๋Š”๋‹ค.
  7. W<0๊ณผ H<0์ธ ๊ฒฝ์šฐ ๋ถˆ๊ฐ€๋Šฅ ํ•œ ๊ฐ’์ด๊ณ  ๋ฐฐ์—ด์— ๋„ฃ์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— 0์„ returnํ•œ๋‹ค.

์ „์ฒด ์ฝ”๋“œ

import java.util.*;
import java.io.*;

public class Main{
	static long[][] d;
    public static void main(String args[]) throws Exception{
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        d = new long[31][31];
        for(int i=0; i<=30; i++) {
        	for(int j=0; j<=30; j++) {
        		d[i][j] = -1;
        		if(i<j || i==0) d[i][j] = 0;
        	}
        }
        d[0][0] = 1;
        int N = 0;
        while((N = Integer.parseInt(bf.readLine()))!=0){
        	System.out.println(find(N, N));
        }
    }
    static long find(int W, int H) {
    	if(W < 0 || H < 0) return 0;
    	if(d[W][H] != -1) return d[W][H];
    	return d[W][H] = find(W, H-1)+find(W-1, H);
    }
}
Comments