본문 바로가기

problem solving

2004번: 조합 0의 개수

5와 2가 나올 수 있는 최소 개수를 구하면 풀 수 있는 문제다.

만약 5로  나눈다면 처음 나눴을 때는 5의 개수

두 번 나눴을 때는 5^2의 개수

세 번 나눴을 때는 5^3의 개수를 구할 수 있다.

이렇게 순서대로 구해 조합 0의 개수를 구했다.

#include <iostream>
 
int countCheck(long long val, int div) {
    int count = 0;
    while (val > 1) {
        count += val / div;
        val /= div;
    }
    return count;
}
 
int main(void) {
    long long n, m;
    std::cin >> n >> m;
    
    long long fiveCnt, twoCnt;
    long long plusCount, minusCount;
    plusCount = countCheck(n, 5);
    minusCount = countCheck(m, 5+ countCheck(n - m, 5);
    fiveCnt = plusCount - minusCount;
 
    plusCount = countCheck(n, 2);
    minusCount = countCheck(m, 2+ countCheck(n - m, 2);
    twoCnt = plusCount - minusCount;
 
    long long count = (fiveCnt > twoCnt) ? twoCnt : fiveCnt;
 
    std::cout << count << "\n";
    return 0;
}
cs

'problem solving' 카테고리의 다른 글

2331번: 반복수열  (0) 2020.03.01
2089번: -2진수  (0) 2020.02.27
1517번: 버블 소트  (0) 2020.02.24
1991번: 트리 순회  (0) 2020.02.23
1929번: 소수 구하기  (0) 2020.02.23