๐ Problem Solving/๐ BOJ
[JAVA] BOJ ๋ฐฑ์ค 4811 ์์ฝ
snowball๐ฐ
2023. 3. 28. 14:23
๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ด์ฐจ์ ๋ฐฐ์ด์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ด์ ํ ๊ฒ์ด๋ค! → ํ ์คํธ ์ผ์ด์ค๊ฐ ์ฌ๋ฌ๊ฐ์ด๋ฏ๋ก ๊ฐ์ ์ต๋๊ฐ์ธ 30(N์ ์ต๋๊ฐ)๊น์ง๋ก ์ ์ธํด์ค ๋ค ๋ค๊ฐ์ด ๊ฐ์ ๊ณต์ ํ๊ฒ ํ๋ค.
- d[i][j]๋ ํ ์์ i๊ฐ, ๋ฐ ์์ j๊ฐ ๋จน๋ ๋ฐฉ๋ฒ์ ์์ด๋ค. → ์ฆ W i๊ฐ, H j๊ฐ๋ฅผ ๊ฐ์ง๊ณ ๋ง๋ i+j๋ฌธ์์ด์ด๋ค.
- ์ด๋ j๋ i๋ณด๋ค ํด ์๋ ์๋ค. → ํ ์์ ๋จน์ ํ ๋ฐ ์์ด ์๊ธฐ๊ธฐ ๋๋ฌธ
- ์ด์ค for๋ฌธ์ ํตํด ๊ฐ์ ์์ง ๋ชจ๋ฅด๋ ๊ฒ์ -1๋ก ๋ถ๊ฐ๋ฅ ํ ๊ฐ๋ค์ 0์ผ๋ก ํ๊ธฐํ์๋ค.
- d[0][0] = 1๋ก ๋์ด ์ด๊ธฐ๊ฐ์ ์ค๋ค. d[1][0] = 1๋ก ์ฃผ์ด๋ ๋๋ค.
- d[i][j] = d[i-1][j] + d[i][j]์ ๊ฐ๋ค. ์ด๋ ๋ถ๊ฐ๋ฅํ ๊ฐ๋ค์ ์์์ 0์ผ๋ก ์ธํ ์ ํด์คฌ๊ธฐ ๋๋ฌธ์ ์ ๊ฒฝ์ฐ์ง ์๋๋ค.
- 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);
}
}