백준

[백준] 💡 백준 2577번 - 숫자의 개수

dev-sunflower 2025. 4. 14. 16:33

✅ 문제 설명

세 개의 자연수 A, B, C가 주어진다.

이 세 수를 곱한 결과에서 0부터 9까지의 숫자가 각각 몇 번 나오는지 구하는 문제다.


📥 입력 예시

150
266
427

📤 출력 예시

3  
1  
0  
2  
0  
0  
0  
2  
0  
0

위 예제의 경우, 150 × 266 × 427 = 17037300 → 이 숫자를 자릿수별로 보면 1, 7, 0, 3, 7, 3, 0, 0이며, 0은 3번, 1은 1번, 2는 0번, …, 7은 2번 등장한 걸 알 수 있다.


내가 짠 코드

import java.util.Scanner;

public class Number2577 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int A = sc.nextInt();
        int B = sc.nextInt();
        int C = sc.nextInt();
        String result = String.valueOf(A * B * C);
        int[] arr = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
        for (char c : result.toCharArray()) {
            switch (c) {
                case '0':
                    arr[0]++;
                    break;
                case '1':
                    arr[1]++;
                    break;
                case '2':
                    arr[2]++;
                    break;
                case '3':
                    arr[3]++;
                    break;
                case '4':
                    arr[4]++;
                    break;
                case '5':
                    arr[5]++;
                    break;
                case '6':
                    arr[6]++;
                    break;
                case '7':
                    arr[7]++;
                    break;
                case '8':
                    arr[8]++;
                    break;
                case '9':
                    arr[9]++;
                    break;
            }
        }

        for (int j : arr) {
            System.out.println(j);
        }
    }
}

 

GPT 리팩토링 코드

import java.util.Scanner;

public class Number2577 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int A = sc.nextInt();
        int B = sc.nextInt();
        int C = sc.nextInt();

        int[] arr = new int[10]; // 0~9까지 개수를 저장할 배열
        String result = String.valueOf(A * B * C); // 곱한 결과를 문자열로 변환

        for (int i = 0; i < result.length(); i++) {
            int digit = result.charAt(i) - '0'; // 문자 → 숫자로 변환
            arr[digit]++;
        }

        for (int count : arr) {
            System.out.println(count);
        }
    }
}

🔍 주요 포인트 정리

String.valueOf() 숫자를 문자열로 쉽게 변환하는 메서드
char - '0' 문자를 숫자로 바꾸는 고전적이면서 효율적인 방법
int[] arr = new int[10] 0부터 9까지의 개수를 저장할 배열 공간

✨ 배운 점

숫자의 자릿수를 다룰 때 문자열로 바꾸고 순회하는 방식이 매우 유용했다.

입력 → 처리 → 출력 흐름을 배열과 문자열 조합으로 구현하는 연습이 됐다.

반복문에서 char - '0' 패턴은 꼭 기억해 두면 여러 문제에 써먹을 수 있겠다.


📌 느낀 점

내가 작성한 코드가 GPT 가 작성한 코드보다 시간과 메모리는 약간 나은 정도지만 가독성에 있어서는 리팩터링 된 코드가 보기 좋은 것 같다. 앞으로도 내가 작성한 코드를 GPT와 비교하며 공부를 해봐야겠다.