백준 10610 30 / C++

이유참치·2025년 12월 15일

백준

목록 보기
123/248

문제 : 10610

풀이 point

수학을 약간 첨가한 문제이다. 30의 배수이려면 3의 배수이면서 동시에 10의 배수이면 된다.
3의 배수임을 확인하는 방법은 각 자리를 더한 합이 3의 배수이면 된다.

10의 배수는 맨 뒤 숫자가 0이면 된다.

풀이 방법

숫자 자리가 총 10^5까지기 때문에 string으로 받아야한다.

받은 값을 내림차순 정렬한다. (0이 뒤에 와야되기 때문)

각 자리를 더한 합이 3의 배수인지 확인한다.
맨 뒤자리가 0인지 확인한다.
둘다 해당된다면 30의 배수이므로 출력한다.

코드

//백준 10610, 30
#include <iostream>
#include <algorithm>
#include <vector>

std::vector<int> num;

int main(){

    std::string s;
    std::cin >> s;

    for(int i{0}; i<s.size(); ++i){
        num.push_back(s[i] - '0');
    }

    std::sort(num.rbegin(), num.rend());

    int sum{0};
    for(int i{0}; i<num.size(); ++i){
        sum += num[i];
    }

    if(sum % 3 != 0) std::cout << -1;
    else if(num[num.size()-1] != 0) std::cout << -1;
    else{
        for(auto c : num) std::cout << c;
    }
    
    return 0;
}
profile
임아리 - 대학생

0개의 댓글