문제 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을 더 해야 비교가 가능한 것이다.
아래 표를 보면 더 이해하기 쉬울 것이다.