[Java] 백준 2577번: 숫자의 개수

hansung's·2024년 2월 29일
0

문제 url:
숫자의 개수

문제:

🐱‍👤 실제 코드

import java.io.*;

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());

        String result = String.valueOf(A * B * C);

        int[] num_arr = new int[10];

        for (int i = 0; i < result.length(); i++) {
            for (int j = 0; j < 10; j++) {
                if(result.charAt(i) == j + 48) {
                    num_arr[j]++;
                }
            }
        }

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


    }
}

특별히 어려운 것 없어서 문제를 코드로 바로 알아보고 해석해보겠다.

😊 코드 해석

나중에 문자형으로 사용하기 위해 곱한 값을 문자열로 변환하여 저장
String result = String.valueOf(A * B * C);

문제에서 0~ 9까지의 숫자가 몇번 나왔는가를 물었기 때문에
0부터 9까지의 개수를 담을 10크기의 배열을 생성 int[] num_arr = new int[10];

그 후 0 ~ 9까지 알아보기 위해 10번 반복을 하며 현재 문자형이 0 ~ 9인지 비교 하기 위해
j + 48을 한다.

 for (int j = 0; j < 10; j++) {
       if(result.charAt(i) == j + 48) {
           num_arr[j]++;
       }
    }
}

그렇다면 왜 48을 더 하는가??
그 이유는 아스키 코드가 있다. 현재 문자형과 숫자 j로 비교하면 비교가 되지 않는다.
j는 0 ~ 9까지의 값을 가지는데, 문자형과 비교하게 되면 이는 아스키 코드 0 ~ 9까지로 변경되기 때문에

아스키 코드에 속한 숫자 0을 비교하기 위해서는 0의 아스키 코드인 48을 더 해야 비교가 가능한 것이다.
아래 표를 보면 더 이해하기 쉬울 것이다.

profile
ABAPER를 꿈꾸는 개발자

0개의 댓글