문 제

세 개의 자연수 A, B, C가 주어질 때 A × B × C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오. 예를 들어 A = 150, B = 266, C = 427 이라면 A × B × C = 150 × 266 × 427 = 17037300 이 되고, 계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다.

입 력

첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다.

150
266
427

출 력

첫째 줄에는 A × B × C의 결과에 0 이 몇 번 쓰였는지 출력한다. 마찬가지로 둘째 줄부터 열 번째 줄까지 A × B × C의 결과에 1부터 9까지의 숫자가 각각 몇 번 쓰였는지 차례로 한 줄에 하나씩 출력한다.

3
1
0
2
0
0
0
2
0
0

코 드

using System;

namespace algorithm
{
    class Program
    {
        static void Main(string[] args)
        {
            // === 입 력 === //
            int sum = 1;

            sum = sum * int.Parse(Console.ReadLine());
            sum = sum * int.Parse(Console.ReadLine());
            sum = sum * int.Parse(Console.ReadLine());
            // === 입 력 === //

            // === 자리수 카운팅 === //
            int[] result = new int[10];
            for (int i = sum; i > 0; i = i / 10)
            {
                result[i % 10]++;
            }
            // === 자리수 카운팅 === //

            // === 출력 === //
            for (int i = 0; i < result.Length; i++)
            {
                Console.WriteLine(result[i]);
            }
            // === 출력 === //
        }
    }
}

비교 코드 - 1

곱한 값을 char형 배열로 변환 이후 0-9숫자까지 char형 배열을 하나하나씩 비교해 가면서 자리수 카운팅

...
// 곱한 값을 분석할 수 있게 char 형으로 변환한다.
char[] pieceNum = temp.ToString().ToCharArray();

int count = 0;

for (int i = 0; i < 10; i++)
{
    for (int j = 0; j < pieceNum.Length; j++)
    {
        if (pieceNum[j].ToString() == i.ToString())
        {
            count++;
        }
    }
    Console.WriteLine(count);
    count = 0;
}

비교 코드 - 2

string을 배열처럼 쓸 수 있다는 사실 발견..

using System;
 
class Program {
 
    static void Main()
    {
        int a = int.Parse(Console.ReadLine());
        int b = int.Parse(Console.ReadLine());
        int c = int.Parse(Console.ReadLine());
 
        Module((a*b*c).ToString());
    }
 
    static void Module(string result)
    {
        int[] count = new int[10];
 
        for(int i = 0; i < result.Length; i++)
        {
            int temp = int.Parse(result[i].ToString());
            count[temp]++;
        }
 
        for(int i = 0; i<count.Length; i++)
        {
            Console.WriteLine(count[i]);
        }
    }
}