+ ์ดํญ๊ณ์?
๊ฒฝ์ฐ์ ์๋ฅผ ๊ณ์ฐํ ๋ ์ฌ์ฉํ๋ค.
๊ฒฐ๋ก ๋ถํฐ ๋งํ๋ฉด ์๋์ ๊ฐ์ด ํฉํ ๋ฆฌ์ผ๋ก ๊ณ์ฐํ ์ ์๋ค.
ํฉํ ๋ฆฌ์ผ ์ฌ๊ทํจ์๋ก ํ์ด๋ณด๊ธฐ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
int result = fact(n) / (fact(k) * fact(n-k));
System.out.println(result);
}
private static int fact(int num) {
if(num == 1 || num == 0){
return 1;
}
return fact(num-1) * num;
}
}
์ฌ๊ทํจ์๋ fact(5) ํธ์ถ ํ fact(5)๋ฅผ ํธ์ถํ๋ฉด ๋ค์ ๊ณ์ฐํด์ ๊ฐ์ ๊ตฌํ๋ค.
fact(5)๋ฅผ ํธ์ถํ๋ฉด ์๋์ ๊ฐ์ด ๋์ํ๋ค
์ฌ๊ธฐ์ ๋ค์ fact(5)๋ฅผ ํธ์ถํ๋ฉด? ๋๊ฐ์ด ์ฌ์ง์ ์ฐ์ฐ์ ๋ฐ๋ณตํ ๊ฒ์ด๋ค.
์ด๊ฒ์ ์ ์ฅํด์ ๊ฐ์ ์ฌ์ฌ์ฉํ์๋๊ฒ DP์ด๋ค.
๋์ ๊ณํ๋ฒ Dynamic Programming
๋์ ๊ณํ๋ฒ์ ํฐ ๋ฌธ์ ๋ฅผ ์๊ฒ ์ชผ๊ฐ์ด ์ฐ์ฐํ๊ณ , ์ฐ์ฐํ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ค๊ฐ ๋ค์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
DP๋ฅผ ์ฌ์ฉํ์ฌ ์์ ๋ฌธ์ ๋ฅผ ๋ค์ ํ์ด๋ณด์
ํฉํ ๋ฆฌ์ผ ์ฌ๊ทํจ์์ DP ์ฌ์ฉํ์ฌ ํ์ด๋ณด๊ธฐ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main11050 {
static int[] dp;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
dp = new int[n+1];
int result = fact(n) / (fact(k) * fact(n-k));
//System.out.println(Arrays.toString(dp));
System.out.println(result);
}
private static int fact(int num) {
if(dp[num] > 0){
//System.out.println(num+"! found");
return dp[num];
}
if(num == 1 || num == 0){
dp[num] = 1;
return dp[num];
}
dp[num] = fact(num-1) * num;
//System.out.println(num + "! save");
return dp[num];
}
}
print๋ฌธ ์ฃผ์์ ํ๊ณ , fact(5)๋ฅผ ํธ์ถํ๋ฉด ์๋์ ๊ฐ์ด ์ถ๋ ฅ๋๋ค
2! save
3! save
4! save
5! save
2! found โญ ์ด๋ฏธ ์ฐ์ฐํ fact(2)๋ฅผ ๋ถ๋ฌ์จ๋ค
3! found โญ ์ด๋ฏธ ์ฐ์ฐํ fact(3)๋ฅผ ๋ถ๋ฌ์จ๋ค
DP๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์ ์ฐ์ฐํ์ง ์์๋ ๋๋ ์คํ ์๋๋ ๋นจ๋ผ์ง๊ฒ๋๋ค.
DP๋ ์ฌ๊ทํจ์์์ ๊ฐ์ฅ ํํ๊ฒ ์ฌ์ฉํ ์ ์๋ค. ํ์ง๋ง ์ฌ๊ทํจ์์๋ง ํ์ ๋ ๋ฐฉ๋ฒ์ ์๋๋ ๊ฒ์ ์๊ณ ์์!
'๐ซAlgorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DFS, BFS ๊ตฌํ๋ฐฉ๋ฒ ( + [๋ฐฑ์ค] 2606 ๋ฐ์ด๋ฌ์ค ๋ฌธ์ ํ์ด) (0) | 2022.02.12 |
---|