ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Baekjoon Online Judge] 2577번: 숫자의 개수
    문제 풀이/Baekjoon Online Judge 2021. 1. 3. 20:47

    [Baekjoon Online Judge] 2577번: 숫자의 개수

     

    2577번: 숫자의 개수

    첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 같거나 크고, 1,000보다 작은 자연수이다.

    www.acmicpc.net

     A, B, C의 숫자 세개를 곱하여 각 자리수가 몇 개 나온지 count 하는 문제이다. 해결 방법은 int 배열과 Map을 사용한 두 가지 방법으로 하였다.


    import java.io.*;
    
    public class Baekjoon2577 {
    
        public static void main(String[] args) throws IOException {
    
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));
    
            int[] numbers = new int[10]; // 0 ~ 9가 나온 횟수를 저장하는 int 배열
    
            int a = Integer.parseInt(bufferedReader.readLine());
            int b = Integer.parseInt(bufferedReader.readLine());
            int c = Integer.parseInt(bufferedReader.readLine());
    
            String number = String.valueOf(a * b * c);
    
            for (int i = 0; i < number.length(); i++) {
               ++numbers[Character.getNumericValue(number.charAt(i))];
            }
    
            for (int i : numbers) {
                bufferedWriter.write(i + "\n");
            }
    
            bufferedWriter.flush();
            bufferedReader.close();
            bufferedWriter.close();
        }
    }

     

     나올 수 있는 숫자가 0 ~ 9로 한정되어 있기 때문에 int 배열의 크기를 10으로 고정할 수 있었다. 각 배열은 나온 수만큼 채워진다. 나온 숫자가 1이라면 1번 index의 값을 하나 증가 시킨다. 연산이 모두 끝났다면 int 배열을 줄바꿈과 함께 출력하여 마무리한다.


    import java.io.*;
    import java.util.HashMap;
    import java.util.Map;
    
    public class Baekjoon2577_1 {
    
        public static void main(String[] args) throws IOException {
    
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));
    
            Map<Character, Integer> numberMap = new HashMap<>();
    
            int a = Integer.parseInt(bufferedReader.readLine());
            int b = Integer.parseInt(bufferedReader.readLine());
            int c = Integer.parseInt(bufferedReader.readLine());
    
            String stringNumber = String.valueOf(a * b * c);
    
            for (int i = 0; i < stringNumber.length(); i++) {
                char charNum = stringNumber.charAt(i);
                if (numberMap.containsKey(charNum)) {
                    numberMap.put(charNum, numberMap.get(charNum) + 1);
                } else {
                    numberMap.put(charNum, 1);
                }
            }
    
            for (int i = 0; i < 10; i++) {
                char charNum = Character.forDigit(i, 10);
                if (numberMap.containsKey(charNum)) {
                    bufferedWriter.write(numberMap.get(charNum) + "\n");
                } else {
                    bufferedWriter.write("0\n");
                }
            }
    
            bufferedWriter.flush();
            bufferedReader.close();
            bufferedWriter.close();
        }
    }

     

     두 번째 방법은 새로운 수가 나올 때마다 해당 값을 Character 타입의 key로 Map에 저장하였다. 이미 있는 key값이면 해당 key의 value를 1씩 더해주고, 없다면 value를 1로 추가한다. 그 후 0 ~ 9까지 for 문을 돌며 Map에 key가 있으면 value를 출력하고, 없다면 0을 출력하여 마무리 하였다.

    댓글

Designed by Tistory.