728x90
SMALL
백준 문제 풀이: 21567 [숫자의 개수 2]
문제 링크: https://www.acmicpc.net/problem/21567
문제 설명:
세 정수 a, b, c가 주어졌을 때, 이들의 곱 a × b × c
의 결과에서 각 숫자(0부터 9까지)가 몇 번 등장하는지를 계산하여 출력하는 문제입니다.
문제 해결 코드
#include <iostream>
#include <string>
using namespace std;
int arr[10]; // 0부터 9까지의 숫자 등장 횟수 저장 배열
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
long long int a, b, c;
cin >> a >> b >> c; // 세 정수 입력
// 세 정수의 곱
long long int res = a * b * c;
// 결과를 문자열로 변환하여 각 자리 숫자 카운트
string s = to_string(res);
for (int i = 0; i < s.size(); i++) {
arr[s[i] - '0']++; // 해당 숫자의 개수 증가
}
// 0부터 9까지 각 숫자의 등장 횟수 출력
for (int i = 0; i < 10; i++) {
cout << arr[i] << '\n';
}
return 0;
}
코드 설명
코드의 주요 로직과 사용된 알고리즘 설명.
- 핵심 알고리즘:
- 세 정수
a
,b
,c
의 곱을 계산합니다. - 결과를 문자열로 변환한 후, 각 숫자의 등장 횟수를 배열
arr
에 저장합니다.
- 세 정수
- 구현 세부사항:
to_string
: 정수를 문자열로 변환하여 각 자리의 숫자를 접근할 수 있도록 합니다.- 각 문자를 숫자로 변환하여 해당 숫자의 등장 횟수를 배열
arr
에 누적합니다. - 최종적으로 배열을 순회하며 각 숫자의 등장 횟수를 출력합니다.
- 시간 복잡도 분석:
- 세 정수의 곱 계산: O(1)
- 곱의 자리수 순회 및 카운팅: O(d), 여기서
d
는 곱의 자리수입니다. - 결과 출력: O(1)
- 전체 복잡도는 O(d)로 매우 효율적입니다.
결과
입력된 세 정수의 곱에 대해 0부터 9까지 각 숫자가 등장한 횟수를 정확히 계산하여 출력합니다.
해당 문제에 대한 다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 구현' 카테고리의 다른 글
백준 20299번 [3대 측정](C++) -yes6686- 티스토리 (0) | 2024.07.19 |
---|---|
백준 20361번 [일우는 야바위꾼](C++) -yes6686- 티스토리 (0) | 2024.07.16 |
백준 4378번 [트ㅏㅊ;](C++) -yes6686- 티스토리 (3) | 2024.07.15 |
백준 4396번 [지뢰 찾기](C++) -yes6686- 티스토리 (1) | 2024.07.15 |
백준 11536번 [줄 세우기](C++) -yes6686- 티스토리 (0) | 2024.07.15 |