Computer Science
탄탄한 기반 실력을 위한
전공과 이론 지식 모음
Today I Learned!
배웠으면 기록을 해야지
TIL 사진
Flutter 사진
Flutter로 모바일까지
거꾸로캠퍼스 코딩랩 Flutter 앱개발 강사
스파르타코딩클럽 즉문즉답 튜터
카카오테크캠퍼스 3기 학습코치
프로필 사진
박성민
임베디드 세계에
발을 들인 박치기 공룡
임베디드 사진
EMBEDDED SYSTEM
임베디드 SW와 HW, 이론부터 실전까지
ALGORITHM
알고리즘 해결 전략 기록
🎓
중앙대학교 소프트웨어학부
텔레칩스 차량용 임베디드 스쿨 3기
애플 개발자 아카데미 1기
깃허브 사진
GitHub
프로젝트 모아보기
Instagram
인스타그램 사진

Develop/알고리즘

[백준] 10610 - 30

sm_amoled 2021. 8. 10. 12:30

문제 링크

https://www.acmicpc.net/problem/10610

문제

어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한다.

미르코를 도와 그가 만들고 싶어하는 수를 계산하는 프로그램을 작성하라.

입력

N을 입력받는다. N는 최대 105개의 숫자로 구성되어 있으며, 0으로 시작하지 않는다.

출력

미르코가 만들고 싶어하는 수가 존재한다면 그 수를 출력하라. 그 수가 존재하지 않는다면, -1을 출력하라.

조건

  • 시간 제한 : 1s
  • 메모리 제한 : 256MB

해설

30의 배수가 되는 조건은 10의 배수 조건과 3의 배수 조건을 동시에 만족하면 된다. 1의 자리수가 0이고(10의 배수 조건), 나머지 자리의 각 숫자의 합이 3의 배수이면 된다.(3의 배수 조건) 그러한 수 중에서 가장 큰 수를 찾고자 하였으므로, 정렬된 수에서 큰 숫자부터 차례로 나열하면 된다.

풀이

자릿수가 10000자리까지 나올 수 있으므로 하나의 변수에 수를 담는 방법으로는 불가능하다. 입력을 getchar() 한 글자씩 따로 받아와서 분리해주는 방식을 선택하였다. char 형으로 받아오기 때문에, ‘0’을 빼 int형의 숫자로 만들어주었다. 숫자의 합이 3의 배수가 되는지를 판별하기 위해 sum에 각 숫자를 더해주었다.

정렬한 숫자 vector에서 0을 갖고 있는지 확인하고 (0이니 맨 앞에 있다) sum이 3의 배수인지 확인한 뒤, 조건에 맞지 않으면 -1을 출력하고, 조건에 맞으면 뒤에서부터 역순으로 숫자를 출력하여 가장 큰 수를 만들어준다.


코멘트

이제 이정도는 간단하지.


코드

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
    char inputC;
    int sum = 0, index;
    vector<int> numbV;

    while(true) {
        inputC = getchar();
        if(inputC == '\n') break;
        numbV.push_back(inputC-'0');
        sum += inputC-'0';
    }

    sort(numbV.begin(), numbV.end());

    if(numbV.at(0) != 0 || sum%3 != 0) {
        printf("-1");
        return 0;
    } 

    for(int i = numbV.size(); i > 0; i--) {
        printf("%d", numbV.at(i-1));
    }
    return 0;
}

320x100

'Develop > 알고리즘' 카테고리의 다른 글

[백준] 11397 - ATM  (0) 2021.08.10
[백준] 1931 - 회의실 배정  (0) 2021.08.10
[백준] 10870 - 피보나치 수 5  (0) 2021.08.10
[백준] 10989 - 수 정렬하기 3  (0) 2021.08.10
[백준] 2156 - 포도주 시식  (0) 2021.08.10