본문 바로가기
코딩테스트/programming_C++

baekjoon #2577_숫자의 개수_c++

by prometedor 2021. 10. 24.
  • 생각할 것
- result = A * B * C 로 정의
- result를 10으로 나눈 몫과 나머지를 이용
- 세 자리 수의 곱이므로 최대 999 * 999 * 999를 연산했을 시 result가 997,002,999 이므로,
배열 arr의 크기를 10으로 정의하고 각각 {0}으로 초기화 해놓기

 

ex) 150, 266, 427 입력 시, result=17037300

result = result / 10 을 반복, result % 10을 반복하면 맨 마지막 숫자부터 각각 몇 개인지 셀 수 있음

 

result = 17037300 / 10 = 1703730 arr[17037300 % 10] -> arr[0] arr[0]의 개수 증가 / arr[0]=1
result = 1703730 / 10 = 170373 arr[1703730 % 10] -> arr[0] arr[0]의 개수 증가 / arr[0]=2
result = 170373 / 10 = 17037 arr[170373 % 10] -> arr[3] arr[3]의 개수 증가 / arr[3]=1
result = 17037 / 10 = 1703 arr[17037 % 10] -> arr[7] arr[7]의 개수 증가 / arr[7]=1
result = 1703 / 10 = 170 arr[1703 % 10] -> arr[3] arr[3]의 개수 증가 / arr[3]=2
result = 170 / 10 = 17  arr[170 % 10] -> arr[0] arr[0]의 개수 증가 / arr[0]=3
result = 17 / 10 = 1  arr[17 % 10] -> arr[7] arr[7]의 개수 증가 / arr[7]=2
result = 1 / 10 = 0 arr[1 % 10] -> arr[1] arr[1]의 개수 증가 / arr[1]=1

result가 0이면 반복 중단

 

나머지 배열의 각 개수는 0으로 초기화 되어있으므로,

arr[0] = 3   -> 0의 개수 3

arr[1] = 1   -> 1의 개수 1

arr[2] = 0   -> 2의 개수 0

arr[3] = 2   -> 3의 개수 2

arr[4] = 0   -> 4의 개수 0

arr[5] = 0   -> 5의 개수 0

arr[6] = 0   -> 6의 개수 0

arr[7] = 2   -> 7의 개수 2

arr[8] = 0   -> 8의 개수 0

arr[9] = 0   -> 9의 개수 0

 

  • 코드
#include<stdio.h>

int main() {
  int A, B, C;
  int arr[10] = { 0 };

  scanf("%d", &A);
  scanf("%d", &B);
  scanf("%d", &C);

  int result = A * B * C;

  while (result != 0) {
    arr[result % 10]++;
    result /= 10;
  }

  for (int i = 0; i < 10; i++) {
    printf("%d\n", arr[i]);
  }
}

'코딩테스트 > programming_C++' 카테고리의 다른 글

baekjoon #4344_평균은 넘겠지_c+  (0) 2021.10.25
baekjoon #8958_OX퀴즈_c++  (0) 2021.10.25
baekjoon #10818_최소, 최대_c++  (0) 2021.10.24
baekjoon #10951_A+B - 4_c++  (0) 2021.10.24
baekjoon #2439_별 찍기 - 2_c++  (0) 2021.10.24