(Java) 백준 2577번 - 숫자의 개수

코딩너구리·2026년 1월 19일

코딩 문제 풀이

목록 보기
165/266

https://www.acmicpc.net/problem/2577

문제

> 세 개의 자연수 A, B, C가 주어질 때 A×B×C를 계산한 결과에 
0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오.

> 예를 들어 A = 150, B = 266, C = 427 이라면 
A×B×C = 150×266×427 = 17037300 이 되고,
계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다.

접근

입력으로 들어오는 수 A,B,C를 받아 세 수의 곱을 먼저 구한다. 구하고 난 뒤 이를 문자열로 변환하여 각 자리수에 접근해 이 수를 배열의 인덱스로 하여 값에 1씩 추가해준다. 반복이 끝나고 이 배열의 값들을 출력해준다.

문제해결

> 숫자 세 개를 각각 입력받아 정수형 변수 A, B, C에 저장한다.
> 문자열 변수 Str을 선언하고 A*B*C를 toString으로 문자열로 변환해 저장한다.
> 0부터 9까지를 인덱스로 할 배열 num을 10의 크기로 선언해주고 초기값을 0으로 채워준다.
> str의 길이만큼 반복하며 각 자리에 접근해 정수형으로 변환하며 인덱스로 가진다.
> 각 인덱스에 대해 증가연산으로 값을 누적한다.
> 배열을 쭉 반복하며 배열에 있는 값들을 StringBuilder변수 sb에 추가해준뒤 한꺼번에 출력해준다.

코드

import java.io.*;
import java.util.*;
import java.lang.*;

public class Main
{
    //2577번 숫자의 개수
    public static void main(String[] args) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int A = Integer.parseInt(br.readLine());
        int B = Integer.parseInt(br.readLine());
        int C = Integer.parseInt(br.readLine());

        String str = Integer.toString(A*B*C);
        //or String.valueOf(A*B*C) 사용

        int[] num = new int[10];
        Arrays.fill(num, 0);
        for(int i = 0; i < str.length(); i++) num[str.charAt(i) - '0']++;

        for(int a : num)  sb.append(a).append('\n');
        System.out.print(sb);
    }
}

후기

int() num = new int(10)으로 배열을 선언해주면 선언과 동시에 배열의 값이 0으로 전부 초기화되기 때문에 Arrays.fill(num, 0); 은 불필요한 코드라고 한다.

0개의 댓글