문제
https://www.acmicpc.net/problem/2577
2577번: 숫자의 개수
첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다.
www.acmicpc.net
코드
way1
#include <iostream>
#include <string>
using namespace std;
int main(){
int a, b, c, result;
cin >> a >> b >> c;
result = a*b*c;
string s = to_string(result);
int array[10] = {0};
for(char c : s){
array[c-'0']+=1;
}
for (int e : array){
cout << e << endl;
}
return 0;
}
way2
#include <iostream>
using namespace std;
int main()
{
int a, b, c, result;
int array[10] = {0, };
cin >> a >> b >> c;
result = a*b*c;
while(result > 0){
array[result%10]++;
result /= 10;
}
for (int e : array)
{
cout << e << '\n';
}
return 0;
}
정리
way1은 형변환을 이용한 문제 풀이이다.
세가지 수를 모두 곱한 결과값을 to_string()을 이용해 int에서 string으로 변경한다.
그리고 array에 인덱스를 표현하기 위해 char를 int로 바꾸는 과정도 필요한데 이 경우 "char형 문자 - '0'"로 이를 구현할 수 있다.
way2는 나머지와 몫을 이용한 문제 풀이이다.
result%10을 이용해서 첫째자리 숫자를 구하고 result/10을 이용해서 그 다음자리 숫자를 첫째자리 숫자로 땡긴다. result가 0이 될때까지 이 과정을 반복하여 모든 자릿수를 차례로 구할 수 있는 테크닉이다.
way1, way2 모두 array의 index를 활용해 문제를 해결한다는 점에서 공통점이 있다.
그러나 자릿수를 어떻게 구할 것인지에 차이가 존재한다.
참조
https://stackoverflow.com/questions/5029840/convert-char-to-int-in-c-and-c
'Beakjoon > else' 카테고리의 다른 글
[백준] 1181번 단어정렬 (C++) - sort, compare (0) | 2022.01.02 |
---|---|
[백준] 10951번 A+B - 4 (C++) (0) | 2021.12.29 |
[백준] 2741번 N 찍기 (C++) (0) | 2021.12.29 |
[백준] 1152번 단어의 개수 (C++) (0) | 2021.12.28 |
[백준] 1008번 A/B (C++) (0) | 2021.12.28 |