[DFS] 7. ์กฐํฉ์ ๊ฒฝ์ฐ์(๋ฉ๋ชจ์ด์ ์ด์ )
<<ํ์ด>>
์ฐ์ ๊ตฌํ ์์ฒด๋ ์ด๋ ต์ง ์๊ฒ DFS๋ฅผ ํ์ฉํ์ฌ ๊ตฌํ ์ ์์์ง๋ง..
๋ฒ์ ์ด๊ณผ๋ก ์ธํด ๊ณ์ ํฐ ๊ฐ๋ค์ ๊ณ์ฐ ์ค๋ฅ๊ฐ ๋ฌ๋ค..
๊ทธ๋์ ์์ ์ ํ ๋ฒ ๋ดค๋ BigInteger๊ฐ ์๊ฐ์ด๋์ ์๋ ํด๋ดค๋ค.
import java.io.BufferedReader;
import java.io.InputStreamReader;
class Main {
private Long DFS(Long num) {
Long answer = num;
if (num == 1) return answer;
else {
answer = answer * DFS(num - 1);
}
return answer;
}
public static void main(String[] args) throws Exception{
Main T = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] arr = br.readLine().split(" ");
Long n = Long.parseLong(arr[0]);
Long r = Long.parseLong(arr[1]);
System.out.println(T.DFS(n) / (T.DFS(n - r) * T.DFS(r)));
}
}
๋ฐ๋ก ์ด ๋ฐ์ ์ฝ๋๊ฐ BigInteger๋ฅผ ํ์ฉํ ์ฝ๋์ด๋ค.
์ด ๋ฐฉ์์ผ๋ก ๋ฌธ์ ๋ฅผ ๋ง์ถ ์ ์์๋ค.
์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ BigInteger๋ฅผ ํ์ฉํ๋ค๋ฉด. ์ผ๋ฐ ์ฐ์ฐ์ ==, >=, +, * ๋ฑ์ ํ์ฉํ ์ ์๊ณ
.equals, .multiply, .subtract์ฒ๋ผ ํด์ผ ์ด์ฉ์ด ๊ฐ๋ฅํ๋ค ใ ใ
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigInteger;
class Main {
private BigInteger DFS(BigInteger num) {
BigInteger answer = num;
if (num.equals(BigInteger.ONE)) return answer;
else {
answer = answer.multiply(DFS(num.subtract(BigInteger.ONE)));
}
return answer;
}
public static void main(String[] args) throws Exception{
Main T = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] arr = br.readLine().split(" ");
BigInteger n = new BigInteger(arr[0]);
BigInteger r = new BigInteger(arr[1]);
BigInteger result = T.DFS(n).divide(T.DFS(n.subtract(r)).multiply(T.DFS(r)));
System.out.println(result);
}
}
-๊ฐ์ฌ๋ ํ์ด-
ํ์คํ ๋ด๊ฐ ํ ๋ฐฉ์ ๋ณด๋ค ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ธ ์ฝ๋์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฉ๋ชจ์ ์ด์ ์ ํ์ฉํด์ ๊ณ์ฐ ํ๋ ๊ฐ์ ์ ์ฅํด๋๊ณ ํ ๋ฒ ๋ ๋์ค๊ฒ ๋๋ฉด ๊บผ๋ด์ด ์ฌ์ฉํจ์ผ๋ก์จ ์๊ฐ ๋ณต์ก๋๋ฅผ ์ค์๋ค. ์กฐํฉ์ ์๋ฅผ ๊ตฌํํ๋ ๋ฐฉ์์ ์ธ์๋๊ณ ์ ์ด์ฉํด๋ณด์!!
import java.io.BufferedReader;
import java.io.InputStreamReader;
class Main {
int[][] dy = new int[35][35];
private int DFS(int n, int r) {
if (dy[n][r] > 0) return dy[n][r];
if (n == r || r == 0) return 1;
else return dy[n][r] = DFS(n - 1, r - 1) + DFS(n - 1, r);
}
public static void main(String[] args) throws Exception{
Main T = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int r = Integer.parseInt(br.readLine());
System.out.println(T.DFS(n, r));
}
}
<<์ถ๊ฐ ๊ณต๋ถ>>
BigInteger