1. DP 는 당연히 안됨 (2^31 2^31) 나오면 망함
2. 이전에 사용했던 bottom-up 방식을 사용
3. 시간초과가 나네?
4. 약분을 할 수 있으면 약분을 하고 하는방식을 사용
5. N-K 를 하는데 K 가 1이면 시간초과가 나네?
6. 조건문을 넣어보자!
7. BufferedWriter 를 쓰니까 틀리네?
8. 버그!
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.*; | |
import java.io.*; | |
/** | |
* https://www.acmicpc.net/problem/6591 | |
* BOJ 백준온라인져지 6591 이항 쇼다운 풀이 | |
*/ | |
public class Main { | |
public static void main(String[] args) throws IOException { | |
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); | |
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); | |
while (true) { | |
String str1[] = br.readLine().split(" "); | |
long N = Long.parseLong(str1[0]); | |
long K = Long.parseLong(str1[1]); | |
if (N == 0 && K == 0) break; | |
long result = 1; | |
// N! / (K! * (N - K)!) | |
// 5 * 4 * 3 * 2 * 1 | |
// 2 * 1 * 3 * 2 * 1 | |
if (K > N - K) K = N - K; | |
for (long i = 1; i <= K; i++) { | |
result *= N--; | |
result /= i; | |
} | |
System.out.println(result); | |
} | |
bw.flush(); | |
} | |
} |
문제
n개의 원소 중에서 k개를 순서 없이 선택하는 방법의 수는 몇 가지 일까?
입력
입력은 하나 또는 그 이상의 테스트 케이스로 이루어져 있다.
각 테스트 케이스는 한 줄로 이루어져 있으며, 두 자연수 n(n ≥ 1)과 k(0 ≤ k ≤n)로 이루어져 있다.
입력의 마지막 줄에는 0이 두 개 주어진다.
출력
각 테스트 케이스에 대해서, 정답을 출력한다. 항상 정답이 231보다 작은 경우만 입력으로 주어진다.
'IT > 알고리즘' 카테고리의 다른 글
BOJ 백준온라인져지 1520 내리막 길 풀이 (0) | 2018.03.05 |
---|---|
BOJ 백준온라인져지 9375 패션왕 신혜빈 풀이 (0) | 2018.03.05 |
BOJ 백준온라인져지 2407 조합 풀이 (0) | 2018.03.02 |
BOJ 백준온라인져지 1676 팩토리얼 0의 개수 풀이 (1) | 2018.03.02 |
BOJ 2608 로마 숫자 풀이 (0) | 2018.03.02 |