https://www.acmicpc.net/problem/2577
문제
세 개의 자연수 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보다 작은 자연수이다.
출력
첫째 줄에는 A×B×C의 결과에 0 이 몇 번 쓰였는지 출력한다. 마찬가지로 둘째 줄부터 열 번째 줄까지 A×B×C의 결과에 1부터 9까지의 숫자가 각각 몇 번 쓰였는지 차례로 한 줄에 하나씩 출력한다.
코드
using System;
class Program {
static void Main()
{
//정수 A, B, C를 받을 그릇을 준비한다.
int[] input = new int[3];
//정수 A, B, C를 받는다.
for (int i = 0; i < 3; i++)
{
input[i] = int.Parse(Console.ReadLine());
}
//정수 A, B, C를 곱한 값을 저장한다.
int temp = input[0] * input[1] * input[2];
//곱한 값을 분석할 수 있게 char 형으로 변환한다.
char[] pieceNum = temp.ToString().ToCharArray();
//1~9의 숫자를 카운트할 변수를 생성한다.
int count = 0;
//pieceNum에 들어있는 수를 분석한다.
// - i번째 줄마다 i가 몇개있는지 체크하여 출력한다. (반복)
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;
}
}
}
설명은 주석... 나는 이렇게 했는데 다른 분들의 코드를 보니 대부분 다른 방식으로 풀었다. 그래서 다른사람의 코드와 비교해보자.
코드비교
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]);
}
}
}
string이 배열로 쓸 수 있다는 건 알았지만 사용할줄은 몰랐는데 위 코드처럼 사용할수도 있구나싶다.
출력
정상출력!