관리 메뉴

LC Studio

백준 2577번 숫자의 개수 본문

Java/백준 알고리즘

백준 2577번 숫자의 개수

Leopard Cat 2022. 3. 11. 12:23

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

 

위와같은 문제이다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main{
    public static void main(String[] args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int A = Integer.parseInt(br.readLine());
        int B = Integer.parseInt(br.readLine());
        int C = Integer.parseInt(br.readLine());
        br.close();

        int sum = A*B*C;

        String Ssum = Integer.toString(sum);
        
        int[] array = new int[Ssum.length()];

        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        for(int i=0;i<Ssum.length();i++){
            if(i+1 == Ssum.length()){
                array[i] = (int) (sum%(Math.pow(10,(Ssum.length()-i))));
                bw.write(array[i]+"\n");
            }
            else{
                array[i] = (int) (sum/(Math.pow(10,(Ssum.length()-1-i))));
                bw.write(array[i]+"\n");
            }
        }
        bw.flush();
        bw.close();
    }
}

첫 시도.

A*B*C의 값을 sum에 입력받고, sum의 length를 알아내어, 각 자릿수별 숫자를 알아내려고 시도했다.

하지만 실패... 다음과 같이 출력되었다.

1 A
1 B
123456 C

 

1
12
123
1234
12345
6

 

생각대로라면 

1

2

3

4

5

6

이런식으로 출력되어야하는데 말이다. 허허...

sum의 length만큼 10에 제곱을 해줘 나눠주는방식이 잘못된 것 같다.

 

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;

    public class Main{
        public static void main(String[] args)throws IOException{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

            int A = Integer.parseInt(br.readLine());
            int B = Integer.parseInt(br.readLine());
            int C = Integer.parseInt(br.readLine());
            br.close();

            int sum = A*B*C;

            String Ssum = Integer.toString(sum);
            
            String[] array = Ssum.split("");
            int[] numArray = new int[10];

            for(int i=0;i<Ssum.length();i++){
                
                for(int j=0;j<10;j++){
                    if(array[i].equals(Integer.toString(j))){
                        numArray[j] = numArray[j] + 1;
                    }   
                }
            }

            for(int i=0;i<10;i++){
                System.out.println(numArray[i]);
            }

            
        }
    }

 

생각을 바꿔 위와같이 작성했더니 해결되었다!

입력받은 int 정수를 String으로 바꿔서 String끼리 비교하는 식을 세웠다.

굳이 int -> String -> int로 바꿔서 비교해줄 필요가 없었다.

 

알고리즘은 제일 단순한 방법을 선택해야하는 것 같다.

 

 

반응형

'Java > 백준 알고리즘' 카테고리의 다른 글

백준 4344 평균은 넘겠지 (Java)  (0) 2022.03.15
백준 8958번 (JAVA)  (0) 2022.03.14
백준 3052 나머지(JAVA)  (0) 2022.03.11
백준 1110번 더하기 사이클 (JAVA)  (0) 2022.03.10
백준 15552번 빠른 A+B (JAVA)  (0) 2022.03.10