출처: https://typemin.tistory.com/7 [TypeLOG:티스토리]

 

 

# 풀이 

어떠한 값이 들어왔을때 그 값을 모두 사용해서 30의 배수인 가장 큰 값을 만드는 프로그램이다.

우선 30의 배수인지를 판별하는 방법으로써 입력받은 값 중에서 0 이 있어야 한다 .만약 0 이없으면 배수가 되지 않을것이기 때문이다.

어떠한 값의 3 배수인지를 확인하려면 다 소인수 분해를 하는 방법도있지만 다른 방법으로는 각 자리의 값을 모두 더해 3으로 나누어 떨어지면 3 의 배수인지를 알수있다 . 이 두개의 조건을 만족하면 30의 배수가 되는 것이다.

 

# 필기

문자를 숫자로 변형하고 싶을때 문자 - '0' 을 해주면된다. 반대로

숫자를 문자로 바꾸고 싶을때는 숫자 + '0' 을 해준다.

배수를 판별하는 방법을 잘 몰라서 조금은 해맸다 .  아래의 링크에서 자세하게 설명해놓아서 쉽게 이해할수 있었다.

https://ko.wikipedia.org/wiki/%EB%B0%B0%EC%88%98_%ED%8C%90%EC%A0%95%EB%B2%95

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main(){
    int n = 0;
    string arrT;
    vector<int> arr;
    int isEven = 0;
    getline(cin,arrT);
    //문자 - > 숫자  문자 -'0'
    for(int i =0;i<arrT.size();i++){
        arr.push_back(arrT[i] - '0');
    }
    //내림차순 정렬
    sort(arr.rbegin(),arr.rend());
    //마지막숫자를 제외하여 isEven의 넣음
    for(int i =0;i<arr.size()-1;i++){
        isEven += arr[i];
    }
    if(isEven % 3 == 0 && arr[arr.size()-1] == 0){
        for(int i =0;i<arr.size();i++){
            cout << arr[i];
        }
        cout << endl;
    }
    else cout << -1 << endl;

}

반응형

+ Recent posts