728x90
SMALL
백준 문제 풀이: 2577 [숫자의 개수]
문제 링크: https://www.acmicpc.net/problem/2577
문제 설명:
세 개의 자연수 A, B, C가 주어집니다. 이 세 수를 곱한 결과에서 0부터 9까지의 숫자가 각각 몇 번 쓰였는지 구하는 프로그램을 작성하세요.
입력 조건:
- 첫째 줄부터 세 줄에 걸쳐 자연수 A, B, C가 주어집니다. (100 ≤ A, B, C < 1,000)
출력 조건:
- 첫째 줄부터 열 번째 줄까지 각 숫자가 결과에서 몇 번 쓰였는지를 출력합니다.
문제 해결 코드
#include <iostream>
using namespace std;
int main() {
int arr[10] = {0}; // 0부터 9까지 숫자의 개수를 저장하는 배열
int a, b, c;
cin >> a >> b >> c;
int num = a * b * c; // 세 자연수의 곱
// 각 자리 숫자 세기
while (num > 0) {
arr[num % 10]++; // 마지막 자리 숫자를 세고
num /= 10; // 숫자를 한 자리 줄임
}
// 결과 출력
for (int i = 0; i < 10; i++) {
cout << arr[i] << endl;
}
return 0; // 프로그램 정상 종료
}
코드 설명
위 코드는 세 자연수의 곱에서 각 숫자가 몇 번 쓰였는지를 계산하고 출력합니다.
- 배열 초기화:
- `arr[10]` 배열을 0으로 초기화하여 각 숫자의 개수를 저장합니다.
- 숫자 세기:
- 주어진 숫자를 10으로 나눈 나머지를 이용하여 마지막 자리를 추출합니다.
- 해당 숫자의 개수를 배열에 추가한 뒤, 숫자를 10으로 나눠 자릿수를 줄입니다.
- 이 과정을 숫자가 0이 될 때까지 반복합니다.
- 결과 출력:
- 0부터 9까지 각 숫자의 개수를 순서대로 출력합니다.
시간 복잡도 분석:
- 숫자의 자릿수만큼 반복하므로 O(log₁₀(num)).
- 배열 초기화와 결과 출력은 O(10).
따라서 전체 시간 복잡도는 O(log₁₀(num))입니다.
결과
다음은 입력 예시와 출력 결과입니다:
입력:
150
266
427
출력:
3
1
0
2
0
0
0
2
0
0
위 입력에서는 세 수를 곱한 결과 150 * 266 * 427 = 17037300에서 숫자들의 개수를 계산합니다.
다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 수학' 카테고리의 다른 글
백준 2739번 [구구단](C++)-yes6686- 티스토리 (0) | 2023.12.18 |
---|---|
백준 15824번 [너 봄에는 캡사이신이 맛있단다](C++)-yes6686- 티스토리 (0) | 2023.12.17 |
백준 2475번 [검증수](C++)-yes6686- 티스토리 (0) | 2023.12.16 |
백준 1008번 [A/B](C++)-yes6686- 티스토리 (0) | 2023.12.16 |
백준 1001번 [A-B](C++)-yes6686- 티스토리 (0) | 2023.12.16 |