✅ 문제 설명
세 개의 자연수 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와 비교하며 공부를 해봐야겠다.