본문 바로가기

Beakjoon/else

[백준] 2577번 숫자의 개수 (C++)

문제

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

https://st-lab.tistory.com/271

'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