반응형
0) 제목
숫자의 개수
BOJ의 2577 번 문제입니다.
C++ 이용해서 풀었습니다.
1) 문제설명
세개의 세자리 자연수 A, B, C 가 주어집니다
A*B*C 한 결과에서
0~9 까지의 숫자의 갯수가 각각 몇개인지 출력하는 문제입니다.
2) 풀이과정
세자리수 자연수 A*B*C 를 했을때 자릿 수를 생각해보면
999를 1000이라 생각하면 10^3 입니다. 이를 세번 곱하니 10^9 입니다.
int가 4bytes 일때, 2^32 이니까. 2^10 == 10^3 이 세번이므로
2^30 == 10^9 과 비슷하다고 생각할 수 있습니다.
그러므로 int 값 범위 안에서 해결이됩니다.
0~9 까지의 숫자를 카운트할 배열 arr을 만들고 0으로 초기화 합니다.
세개의 자연수를 곱한 값을 10으로 나눈 나머지를 인식해서 해당 배열 인덱스를 1씩 증가 해옵니다.
그 다음 세개의 자연수를 곱한 값을 10으로 나누어서 1의 자리를 없앱니다.
(1의 자리를 계속 얻어오면서, 10으로 나누어서 자릿수를 없애는 방식)
3) 함수설명
주석 달아놨습니다.
4) 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include<iostream> using namespace std; int main(void){ int a, b, c; //입력받을 3가지 변수 int arr[10] = {0}; //0으로 초기화 cin >> a >> b >> c; // 숫자 3가지를 받습니다. int result = a*b*c; //1의 자리를 얻어 옵니다. //resutl 가 0 이 되면 while문을 빠져나갑니다. while(result != 0){ arr[result % 10] +=1; result /= 10; } //출력. for(int i=0; i<10; i++){ cout << arr[i] << endl; } return 0; } | cs |
5) 인증
출처 : https://www.acmicpc.net/problem/2577
쉬운 문제, 어려운 문제 가리지 않고 풀고있습니다.
백준 아이디는 공개하지 않고 캡쳐 했습니다.
반응형
'<알고리즘 문제풀이&연습> > [C++] 백준, 프로그래머스 등등' 카테고리의 다른 글
[백준 11050] 이항계수 1 (반복, 재귀) (0) | 2017.07.31 |
---|---|
[백준 1157] 단어 공부 (map) (1) | 2017.07.29 |
[백준 2750] 수 정렬하기 (버블정렬, 삽입정렬) (0) | 2017.07.28 |
[백준 1152] 단어의 개수 (strtok) (2) | 2017.07.27 |
[백준 11720] 숫자의 합 (아스키코드) (0) | 2017.07.25 |
[C++ vector] Vector-Erase (0) | 2017.07.24 |
[C++ protected] Rectangle Area (Inheritance) (0) | 2017.07.19 |
[백준 14612] 김식당 (IUPC) (0) | 2017.07.18 |