문제는 백준 사이트와 똑같으니, 해설부터 보셔도 됩니다.
세 개의 자연수 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가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다.
첫째 줄에는 A × B × C의 결과에 0 이 몇 번 쓰였는지 출력한다. 마찬가지로 둘째 줄부터 열 번째 줄까지 A × B × C의 결과에 1부터 9까지의 숫자가 각각 몇 번 쓰였는지 차례로 한 줄에 하나씩 출력한다.
입력
150
266
427
출력
3
1
0
2
0
0
0
2
0
0
우선 세 개의 자연수를 곱해줘야하기 때문에 Scanner 타입의 변수를 선언해주고 for문을 통해서 3번의 nextInt()를 사용해야겠다고 생각했습니다. 이때, int 타입의 변수 result를 만들어 입력과 동시에 result에 곱해줍니다. 이로인해 세 개의 자연수를 곱하는 것까지 해결되었습니다.
- 입력 받기 위해 Scanner 사용
- 세 개의 자연수이기 때문에 for문을 통해 세 번 입력 받기
- result라는 변수를 따로 선언하여 입력 받을 때 바로 곱해주기
int result = 1;
for (int i = 0; i < 3; i++) {
result *= sc.nextInt();
}
result를 새 변수 s에 문자열로 선언하고, 0부터 9까지 각각의 숫자의 횟수를 출력해줘야하기 때문에 for문으로 구현하고, 그 안에 result의 길이만큼 반복하는 for문을 구현하여 if문 또는 삼항연산자를 통해서 s의 숫자 하나하나를 비교하며 n이라는 새로운 변수에 count를 해줍니다. 이때, n은 안에 있는 for문이 끝날 때마다 0으로 초기화 해줘야 다음 숫자의 횟수를 count 할 수 있겠죠? 그리고 charAt()를 사용할 경우 char타입으로 변하기 때문에 '0' 또는 48을 빼줌으로써 정수로 변환합니다.
● ex) 49 - 48 = 1 / 아스키코드 참고
- result를 문자열로 변환
- 중첩 for문을 통해 각 숫자의 횟수를 구하도록 구현
- charAt()를 정수로 변환하여 i와 비교 후 참일경우 +1을 하여 카운트 구현
int n; // 각 숫자 카운트 해주는 변수
String s = "" + result; // int to String
for (int i = 0; i <= 9; i++) {
n = 0;
for (int j = 0; j < s.length(); j++) {
n = (s.charAt(j) - '0' == i) ? n + 1 : n; // char to int 후 카운트
}
System.out.println(n);
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int result = 1, n;
for (int i = 0; i < 3; i++) {
result *= sc.nextInt();
}
String s = "" + result;
for (int i = 0; i <= 9; i++) {
n = 0;
for (int j = 0; j < s.length(); j++) {
n = (s.charAt(j) - '0' == i) ? n + 1 : n;
}
System.out.println(n);
}
}
}