백준 2577번 숫자의 갯수

2016. 12. 7. 23:08Algorithm Solution

<숫자의 갯수>

세개의 숫자가 있는데 그것을 다 곱해서 나온 값을 가지고 숫자가 몇개 있는지 세는 프로그램이다. 

일단 문제는 아래와 같다.

문제 



일단 3개의 숫자를 받고 곱한다음에 result 변수에 저장하였다. 

그리고 나는 result를 String으로 변환하였고, char[]을 만들어서 각각 자릿수마다 배열에 저장하였다. 

그러고나서 char[] ch 배열의 값을 int형으로 바꾸기 위해 - '0'을 하였다.

(char 값은 '5'-'0'을 하면 int형 5로 변환할 수 있다.)

그리고 그 변환된 값은 number[변환된 값]++ 을 하였다. 기본값은 0이기 때문이다. 

즉 number의 index값은 숫자이고 그 index값 안에 저장되어있는 값은 숫자의 갯수를 뜻한다.

간단히 이야기 하면 number[숫자] = 숫자의 갯수 이다.

그리고 마지막으로 number[] 배열을 출력하면 된다.



<java>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.util.Scanner;
 
 
class Main {
    public static void main(String[] args) {
 
 
        Scanner sc = new Scanner(System.in);
        int num1 = sc.nextInt();
        int num2 = sc.nextInt();
        int num3 = sc.nextInt();
        int result= num1* num2* num3;
        String str = Integer.toString(result);//int to String
        char[] ch= str.toCharArray(); //String to char
 
        int[] number= new int[10];
 
        for(int i=0; i<ch.length;i++)
        {//해당되는 숫자 갯수 증가
            number[ch[i]-'0']++;
        }
 
        for(int a: number)
        {//각 숫자 갯수 출력
            System.out.println(a);
        }
 
    }
}
 
cs


다른 사람들의 소스를 보니 더욱더 간단한 방법이 있었다. 나의 경우에는 시간복잡도가 아마 떨어질거 같다. 아무래도 String형과 char형으로 바꾸고 다시 int형으로 바꾸는 작업만 해도 느리게 작동 될 것이다. 


다른 고수들은 저 while문에서 바로 끝냈다. 그것은 result 값에서 나머지값을 구한다음에 그 나머지값의 저장된 값을 증가하는 것이다. 

(number[나머지값]= 숫자의 갯수)

그리고나서 result= result/10을 하고 또 while문을 돌면 각각 자릿수의 숫자를 구할 수 있었다. 

여태까지 이런 쉬운방법을 모르고 있었다니...오늘 정말 많이 배운다. 문제 자체는 어렵지 않았지만 효율성면에서는 많이 반성해야할듯! 

밑에 소스이다!


<java>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.Scanner;
 
 
class Main {
    public static void main(String[] args) {
 
 
        Scanner sc = new Scanner(System.in);
        int num1 = sc.nextInt();
        int num2 = sc.nextInt();
        int num3 = sc.nextInt();
        int result= num1* num2* num3;
        int[] number= new int[10];
        while(result>0)
        {
            number[result%10]++;
            result/=10;
        }
 
        for(int a: number)
        {//각 숫자 갯수 출력
            System.out.println(a);
        }
 
    }
}
 
cs



'Algorithm Solution' 카테고리의 다른 글

백준 1193 분수찾기  (0) 2016.12.16
숫자 팰린드롬(palindrome)  (0) 2016.12.12
백준 1152번 단어의 갯수 세기 문제<java>  (0) 2016.12.07
Prime Number(소수) 구하기 java  (0) 2016.01.13
피보나치 수열 구하기  (0) 2016.01.10