rueki
백준 2577 : 숫자의 개수(C/C++) 본문
728x90
반응형
A와 B와 C의 곱 결과를 배열에 넣는 것을 요구하는 문제이다.
여기서 Point는 결과값의 각 자리의 숫자를 Count해야한다는 점인데 (몇 번 쓰였는지)
예를들어 1234라는 숫자가 있으면 1,2,3,4 가 각각 1개씩 있으니 결과값으로 1,1,1,1 이 출력되야된다는 것이다.
그래서 0~9까지의 숫자가 있으니 배열 크기는 10으로 주었다.
예시 입출력을 한 번 보자
150 x 266 x 427 = 17037300 인데 출력값으로 0~9까지의 숫자가 몇 개씩 있는지를 나타낸 것을 확인할 수가 있다.
코드로 문제를 풀어보자
#include <iostream>
using namespace std;
int main(){
int A,B,C;
int mul = 0;
int arr[10]={0};
cin>>A;
cin>>B;
cin>>C;
mul = A * B * C;
while(mul !=0){
arr[mul%10]+=1;
mul = mul/10;
}
for(int i=0;i<10;i++)
{
cout<<arr[i]<<endl;
}
return 0;
}
여기서 나도 풀면서 가장 이해가 안 갔던 부분이 arr[mul%10]+=1 이였다.
저 줄을 해석하면 곱셈 결과에 대해 나머지 연산을 하면 0~9사이의 숫자가 하나 나올 것이다.
그래서 그 숫자의 인덱스에 1을 더해주는 것으로 볼 수가 있다.
예를 들면 1000을 10으로 나누고 난 나머지는 0이다. 그래서 arr[0]에 1을 더해주게 된다.
이후에 계속 반복 연산을 하게 되면 나머지가 순서대로 0,0,0,1이 나오게 되고 a[0] = 3, a[1] = 1 이라는 결과가 나온다.
나머지는 보면 이해하기 쉬우니 생략^ㅡ^
728x90
반응형
'C, C++ 문제풀이' 카테고리의 다른 글
백준 8958번 : OX퀴즈 (C/C++) (0) | 2019.06.30 |
---|---|
백준 1546번 : 평균(C/C++) (0) | 2019.06.30 |
백준 2562번 : 최댓값(C/C++) (0) | 2019.06.28 |
백준 1110번 : 더하기 사이클(C/C++) (0) | 2019.06.28 |
백준 10951번 : A+B -4 (C/C++) (0) | 2019.06.28 |
Comments