알고리즘 : 문자열
시간 제한 | 메모리 제한 |
2초 | 128MB |
문제
n명의 사람중 m명을 순서에 상관없이 뽑는 경우의 수를 조합이라고 하며 nCm으로 나타낸다.
nCm은 수식으로 n!/m!(n-m)! 으로 구할 수 있다. (5! = 1 2 3 4 5)
n과 m이 주어졌을때 nCm의 끝자리 0의 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 정수 n,m (0≤m≤n≤2,000,000,000, n≠0)이 들어온다.
출력
n과 m이 주어졌을때 nCm의 끝자리 0의 개수를 출력
예제 입력 1
25 12
예제 출력 1
2
출처
- 데이터를 추가한 사람: dcrgkev
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
Main main = new Main();
main.main();
}
public void main() throws Exception {
//System.setIn(new FileInputStream("src/test1/input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine().trim();
String[] sp = line.split(" ");
int N = Integer.parseInt(sp[0]);
int M = Integer.parseInt(sp[1]);
int twoCnt = calculateKcountOfFatorialN(N, 2) - (calculateKcountOfFatorialN(N-M, 2)+calculateKcountOfFatorialN(M, 2));
int fiveCnt = calculateKcountOfFatorialN(N, 5) - (calculateKcountOfFatorialN(N-M, 5)+calculateKcountOfFatorialN(M, 5));
System.out.println(calculateCountOfTen(twoCnt, fiveCnt));
br.close();
}
private int calculateCountOfTen(int twoCnt, int fiveCnt) {
if(twoCnt <= 0 || fiveCnt <= 0) {
return 0;
} else {
return twoCnt > fiveCnt ? fiveCnt : twoCnt;
}
}
private int calculateKcountOfFatorialN(int N, int K) {
int sum = 0;
for(long i=K;i<=N;i*=K) {
sum+=N/i;
}
return sum;
}
}
시간 | 메모리 |
132ms | 14260KB |
출처
'알고리즘' 카테고리의 다른 글
정렬/나이순 정렬 백준 10814번 (0) | 2021.10.03 |
---|---|
기본정수론/피보나치 수 백준 2747번 (0) | 2021.10.03 |
문자열/패린드롬조사 백준 10988번 (0) | 2021.09.26 |
기본정수론/수빈이와 수열 백준 10539번 (0) | 2021.09.25 |
기본정수론/벌집 백준 2292번 (0) | 2021.09.25 |