본문 바로가기

백준/실버

[백준 1769번] 3의 배수 (C++)

문제링크 : https://www.acmicpc.net/problem/1769

 

1769번: 3의 배수

문제가 잘 풀리지 않을 때, 문제를 바라보는 시각을 조금만 다르게 가지면 문제가 쉽게 풀리는 경험을 종종 해 보았을 것이다. 여러 가지 방법이 있지만 그 중 하나로 우리가 풀고 싶은 문제를

www.acmicpc.net

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;

int X, cnt;
string s;

int main()
{
    ios_base::sync_with_stdio(0); 
	cin.tie(0);
    
    cin >> s;

    while(s.size()!=1) //한 자릿수가 될 때까지
    {
        int sum = 0;
        for(int i=0; i<s.size(); i++)
        {
            sum += s[i]-'0'; //숫자로 변환후 더해주기
        }
        s = to_string(sum); //다시 문자로
        cnt++; //카운팅
    }

    cout << cnt << "\n";
    cout << (stoi(s)%3 ? "NO" : "YES");
    
    return 0;
}

 

계산을 용이하게 하기 위해서 숫자를 문자열로 입력받는다.

그리고 해당 문자열의 각 한자리를 일일이 숫자로 변환 후에 누적합을 구해준다.

해당 누적합을 다시 문자열로 변환하고, 해당 문자열의 길이가 1이 될 때까지 이를 반복한다.

위 과정에서 카운팅도 같이 해준다.

 

이렇게 나온 마지막 문자열을 숫자로 변환 후, 해당 숫자가 3의 배수인지 아닌지에 따라 출력을 달리 해주면 된다.