[BOJ] 2577_숫자의 개수 (string, 형변환 등)

gogori6565·2022년 7월 19일
0

📌관건 : a x b x c 의 값의 숫자 하나하나를 어떻게 쪼갤 것인가? (17302 -> 1, 7, 3, 0, 2)

풀이

1. 숫자를 반복적으로 %10 하여 쪼개기

#include<iostream>
using namespace std;

int main(void)
{
    cin.tie(NULL); ios_base::sync_with_stdio(false);

    int arr[10]={0,}; //0~9 숫자 카운트 배열 ({0,} 요소 전부 0으로 초기화)
    int a,b,c;
    cin>>a>>b>>c;
    int mul=a*b*c;

    for(int i=mul;i>0;i/=10)
        arr[i%10]+=1;

    for(int i=0;i<10;i++)
        cout<<arr[i]<<"\n";
    
    return 0;
}

ex) abc = 17302 일 경우,

			    arr[2]++
(/10 하여 1730) arr[0]++
(/10 하여 173)  arr[3]++
(/10 하여 17)   arr[7]++
(/10 하여 1)    arr[1]++
(/10 하여 0)    for문 종료

2. int -> string 으로 바꿔 배열로 하나씩 접근

#include<iostream>
#include<string>
using namespace std;

int main(void)
{
    cin.tie(NULL); ios_base::sync_with_stdio(false);

    int arr[10]={0,}; //0~9 숫자 카운트 배열 ({0,} 요소 전부 0으로 초기화)
    int a,b,c;
    cin>>a>>b>>c;

    string mul=to_string(a*b*c); //정수 -> 문자열 변환

    for(int i=0;i<10;i++)
    {
        int num=mul[i]-'0';
        for(int j=0;j<10;j++)
            if(num==j) arr[j]+=1;
    }

    for(int i=0;i<10;i++)
        cout<<arr[i]<<"\n";

    return 0;
}

string mul 에 a*b*c의 값을 넣으면 문자열로 바뀌면서 mul[index]로 숫자 하나하나씩 접근할 수 있다고 생각해서 해본 방법!
이때, 필요한 C++ 기능을 구글로 공부한 몇 가지를 정리해보겠다.

  • int <-> string 간 형변환
  • C++ 자료형 확인 방법

문제 출처 : https://www.acmicpc.net/problem/2577

profile
p(´∇`)q

0개의 댓글