본문 바로가기
코딩테스트 준비/백준 C#

백준 C# - 2004 +) 풀이

by 코딩하는 돼징 2023. 11. 6.
반응형

문제 풀기를 앞서 아래 문제를 먼저 풀어보는 것을 추천한다.

백준 C# - 1676

 

백준 C# - 1676 +) 풀이

서론 처음에 풀때 팩토리얼 계산을 이용해서 풀었다. 효율적이지 않은 것 같아서 인터넷을 찾아보니 5와 2의 소인수분해로 풀어야 된다는 것을 알게되었다. 풀이 5의 개수를 구하자 0이 생기는

code-piggy.tistory.com


문제 소개

nCm의 결과에서 끝자리 0의 개수를 출력하는 문제이다. 끝자리가 0인 갯수는 10의 배수를 구하면 된다. 따라서 2와 5의 소인수 갯수중 작은 것을 구하면 답이 된다.


풀이

01 2의 소인수 배수

static long twoCount(long num)
{
    long count = 0;
    while (num >= 2)
    {
        count += num / 2;
        num /= 2;
    }
    return count;
}

02 5의 소인수 배수

static long fiveCount(long num)
{
    long count = 0;
    while (num >= 5)
    {
        count += num / 5;
        num /= 5;
    }
    return count;
}

03 2와 5의 소인수 배수중 작은 것을 출력

long count2 = 0;
long count5 = 0;

count2 = twoCount(n) - twoCount(m) - twoCount(n - m);
count5 = fiveCount(n) - fiveCount(m) - fiveCount(n - m);

Console.Write(Math.Min(count2, count5));

04 int형으로 하면 안된다.

n과m의 범위가 0부터 2,000,000,000까지이기 때문에 int형이 아니라 long형이어야 한다.


코드 전문

using System;

namespace baek2
{

    class Program
    {
        static long fiveCount(long num)
        {
            long count = 0;
            while (num >= 5)
            {
                count += num / 5;
                num /= 5;
            }
            return count;
        }
        static long twoCount(long num)
        {
            long count = 0;
            while (num >= 2)
            {
                count += num / 2;
                num /= 2;
            }
            return count;
        }

        static void Main(string[] args)
        {
            String[] numbers = Console.ReadLine().Split();
            long n = long.Parse(numbers[0]);
            long m = long.Parse(numbers[1]);
            long count2 = 0;
            long count5 = 0;

            count2 = twoCount(n) - twoCount(m) - twoCount(n - m);
            count5 = fiveCount(n) - fiveCount(m) - fiveCount(n - m);

            Console.Write(Math.Min(count2, count5));
            
        }
    }
}
반응형

'코딩테스트 준비 > 백준 C#' 카테고리의 다른 글

백준 C# - 17087 +) 풀이  (1) 2023.11.20
백준 C# - 9613 +) 풀이 (유클리드 호제법)  (0) 2023.11.18
백준 C# - 1676 +) 풀이  (0) 2023.11.05
백준 C# - 10872 +) 풀이  (0) 2023.11.05
백준 C# - 6588 +) 풀이  (0) 2023.11.05

댓글