package baekjoon.problem;
// 세 개의 자연수 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번
public class Problem_2577 {
public static void main(String[] args) {
int[] Int_Count_Array = new int[10];
int
A = 150,
B = 266,
C = 427,
multiply = A*B*C;
Int_Count_Array = Countint(multiply);
for(int s : Int_Count_Array) System.out.println(s);
}
//숫자를 문자열로 만들어줌
public static String MakeIntToString(int multiply){
String String_Multiply = Integer.toString(multiply);
return String_Multiply;
}
//문자열이 아닌 문자를 숫자로 바꿔줌
public static int MakeCharToInt(char Char_Multiply){
int Int_Multiply = (int)Char_Multiply;
return Int_Multiply;
}
//숫자를 배열에 나눠서 저장 해줌
public static int[] Countint(int multiply){
String String_Multiply = MakeIntToString(multiply);
int[] Int_Count_Array = new int[10];
int Int_Multiply;
for(int i=0; i < String_Multiply.length(); i++){
Int_Multiply = MakeCharToInt(String_Multiply.charAt(i));
switch(Int_Multiply-48){
case 0 -> Int_Count_Array[0] += 1;
case 1 -> Int_Count_Array[1] += 1;
case 2 -> Int_Count_Array[2] += 1;
case 3 -> Int_Count_Array[3] += 1;
case 4 -> Int_Count_Array[4] += 1;
case 5 -> Int_Count_Array[5] += 1;
case 6 -> Int_Count_Array[6] += 1;
case 7 -> Int_Count_Array[7] += 1;
case 8 -> Int_Count_Array[8] += 1;
case 9 -> Int_Count_Array[9] += 1;
}
}
return Int_Count_Array;
}
}
처음에 는 이렇게 풀어보았다
코드를 모두 작성하고 나서 이거는 너무 효율이 없어 보이네....
라는 생각을 하며 이 문제를 푼 다른 사람들의 답을 보았다.
그중 가장 괜찮은 알고리즘을 사용해 보기로 했다
package baekjoon.problem;
import java.util.Scanner;
// 세 개의 자연수 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번
public class Problem_2577 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int Result = s.nextInt() * s.nextInt() * s.nextInt();
s.close();
int[] Count_Int = new int[10];
//어떻게 이런 것을 생각했는지 매우 경이롭다
while(Result != 0){
Count_Int[Result % 10] +=1;
Result /= 10;
}
//여기는 내각 생각해본 부분 굳이 연산을 추가 시킬 필요 없다 효율성 없는 코드이다....
// for(int i = 0; i <= Integer.toString(Result).length(); i++){
// Count_Int[Result%10] += 1;
// Result /= 10;
// }
for(int count : Count_Int) System.out.println(count);
}
}