문제 풀이/Baekjoon Online Judge

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

hyeonic 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을 출력하여 마무리 하였다.