문제
세 개의 자연수 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까지의 숫자가 각각 몇 번 쓰였는지 차례로 한 줄에 하나씩 출력한다.
예제 입력

내 제출
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int A = Integer.parseInt(br.readLine());
int B = Integer.parseInt(br.readLine());
int C = Integer.parseInt(br.readLine());
int sum = A * B * C;
int[] answer = new int[10];
while (sum > 0) {
answer[sum % 10]++;
sum = sum / 10;
}
for (int n : answer) {
bw.write(n + "\n");
}
br.close();
bw.flush();
bw.close();
}
}
문제 해결 사고 과정
- 문제 이해: 세 개의 자연수 $ A, B, C$ 가 주어지고, 이들을 곱하여 계산한 결과에서 숫자 0부터 9까지 몇 번 등장하였는지 세어서 출력하는 문제 입니다.
- 접근 방식: 숫자의 빈도를 저장하는 배열을 선언하고, 세 개의 자연수를 곱한 결과를 10으로 나눈 나머지를 인덱스로 사용하여 빈도수를 증가시켰습니다. 그 후, 결과를 10으로 나누어 값을 업데이트하고, 결과가 0보다 클 때까지 반복하여 각 자릿수의 빈도를 카운트하였습니다.
자료 구조 선택 이유
- 선택한 자료 구조: 배열을 사용하여 숫자의 빈도를 카운트 하였습니다.
- 이유 및 장점: 배열은 특정 인덱스에 접근하고 값을 변경할 때 `O(1)`의 시간 복잡도를 가지므로 메모리 사용이 효율적이며, 각 숫자의 빈도를 빠르게 카운트 할 수 있습니다.
테스트 케이스
- 생략
시간 및 공간 복잡도 분석
- 시간 복잡도: 상수 연산은 `O(1)`의 시간복잡도를 가지므로 전체 코드의 시간 복잡도는 `O(1)` 입니다.
- 공간 복잡도: 데이터 구조의 크기가 입력의 크기에 상관없이 일정하므로, 공간 복잡도는 `O(1)` 입니다.
'PS > 백준' 카테고리의 다른 글
| [백준 | 1475] 방 번호- Java (0) | 2024.08.22 |
|---|---|
| [백준 | 1919] 애너그램 만들기 - Java (0) | 2024.08.21 |
| [백준 | 10845] 큐- Java (0) | 2024.08.16 |
| [백준 | 1406] 에디터- Java (0) | 2024.08.16 |
| [백준 | 1874] 스택 수열- Java (0) | 2024.08.16 |
