본문 바로가기

개발하자/JAVA문제풀이

frequency (수의 빈도수 계산)

프로그램 명: frequency             

수 N (0 <= N <= 25) 을 입력으로 받아 N ! 의 빈도수를 출력하는게 문제이다.

입력

수 N 이 입력으로 주어진다.

출력

각 자리의 빈도수가 출력 예의 형식으로 출력 된다.

입출력 예

입력
1
출력
1! --   
(0)    0    (1)    1    (2)    0    (3)    0    (4)    0    
(5)    0    (6)    0    (7)    0    (8)    0    (9)    0 
입력
5
출력
5! --   
(0)    1    (1)    1    (2)    1    (3)    0    (4)    0    
(5)    0    (6)    0    (7)    0    (8)    0    (9)    0 
입력
10
출력
10! --   
(0)    2    (1)    0    (2)    1    (3)    1    (4)    0    
(5)    0    (6)    1    (7)    0    (8)    2    (9)    0 
sol)
import java.util.Scanner;
class Main{
   static long fac(long s){   //재귀함수 이용하여 팩토리얼 계산
      if(s!=1){
      s=s*fac(s-1);
      }
      return s;
   }
   public static void main(String args[]){
   Scanner sc = new Scanner(System.in);  
   int a=sc.nextInt();    //계산할 수 입력받음
   String temp="";
   String fre=""+fac(a);          //팩토리얼 계산한 정수값을 문자열로 변환
      for(int i=0;i<fre.length();i++){ 
         temp+=fre.charAt(i);   //문자열로 변환된 값을 인덱스별로 잘라서 temp변수에 저장
      }
      long[][] num1=new long[10][3];  //빈도수 계산한 숫자를 저장할 2차원배열 선언
   System.out.println("계산값:"+temp);    //계산값 출력해보기
      for(int num=0 , w=1;num<num1.length;num++){   //0~9번까지의 빈도수 확인을 위한 for문
            for(int n=0; n<temp.length();n++){   //temp변수에 저장된 문자열 길이만큼 for문돌려서
               if(num==Integer.parseInt(String.valueOf(temp.charAt(n)))){ //0~9번값(num)과 같다면
                  num1[num][0]+=w;   //그값과 같은 인덱스 배열num1[num][0]에 숫자증가
               }
            }    
      }
      for(int aa =0; aa<10; aa++) //빈도수 확인 위한 출력 for문
            System.out.print("("+aa+")"+num1[aa][0]+"\t");
   }
}