백준 #34 [C++] 2577. 숫자의 개수, sprintf함수, 배열

K Choi·2022년 3월 13일
0

백준

목록 보기
34/37
post-thumbnail

❔문제: 백준 2577

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

예제 입력 1

150
266
427

예제 출력 1

3
1
0
2
0
0
0
2
0
0

✍️풀이

지난 번 포스트에서는 같은 문제를 C언어로 풀이했었는데 시간이 좀 걸렸어서;;
C++로는 이번에 풀어보려고 합니다!

그 전에 sprintf함수에 대해서도 좀더 자세히 정리하고 갈게요:)

sprintf 함수

형식

int sprintf(char* str, const char* format, ...);

설명 및 역할

  • C 라이브러리의 함수로, str이 가리키는 문자열을 지정된 형식(format)으로 출력합니다.
  • 버퍼 사이즈는 전체 문자열을 저장할 수 있을 만큼 충분히 커야 한다.
  • 종료 문자(null)은 전체 내용 뒤에 자동으로 추가된다.
  • 함수는 형식문자 다음에 형식에 필요한 만큼의 추가 인자를 예상한다.

<사용된 인자들>
str
문자를 요소로 갖는 배열의 버퍼를 가리키는 포인터, 문자열이 저장되어 있다.
이때, 버퍼는 문자열을 담을 수 있는 크기여야 함

format
printf의 형식과 동일한 문자열 형식

...(추가적인 변수들)
형식 문자열에 따라 함수에 변수들이 추가될 수 있는데,
이 변수들은 형식지정자 자리를 대체할 형식 문자열 값을 포함해야 한다.
이 추가적인 변수들은 최소 형식지정자가 지정한 값의 개수만큼은 있어야 하며,
함수에 의해 무시될 수도 있다.

sprintf함수 리턴값

정상적으로 실행된다면 입력한 문자의 개수가 반환된다.
이때 자동으로 추가된 null 문자는 개수에 포함되지 않는다.

실행이 실패하면 음수값이 반환된다.

💡예제 코드

#include <stdio.h>
int main ()
{
  char buffer [50];
  int n, a=5, b=3;
  n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);
  printf ("[%s] is a string %d chars long\n",buffer,n);
  return 0;
}

예제 출력: [5 plus 3 is 8] is a string 13 chars long

C++ 코드

그럼 이제 2577번을 C++코드로 작성해보겠습니다.

#include <iostream>
using namespace std;
int main() {
    int A, B, C, mul;
    int N[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    char M[9];
	cin >> A >> B >> C;
	mul = A*B*C;
    sprintf(M, "%d", mul);
	for (int i=0; i<=9; i++){
		for (int j=0; j<=9; j++){
			if (M[i]-'0' == j) N[j]++;
		}
	}
	for (int i=0; i<10; i++) cout << N[i] << '\n';
    return 0;
}
profile
mbeCoder

0개의 댓글