본문 바로가기
백준

[백준] 10610번: 30 - JAVA(자바) / 그리디 알고리즘

by z00h 2022. 11. 30.

 

 

 

 

30배수의 조건부터 알아보자면

 

1. 마지막 자리수는 '0'이여야 한다.

2. 각 자리수 합이 3의 배수이다.

 

 

조건에 맞게 30의 배수중 주어진 수를 섞어 가장 큰 수를 만들어야 한다.

 

list를 활용하여 문자열을 하나씩 받아와서 list에 추가해 주었고

 

0이 있는지를 확인하기 위하여 list를 오름차순으로 순서를 지정하였다. 

 

그 후 if 문을 이용해 0을 검사, 각 자리수 합이 3의 배수인지를 검사한다.

 

그리고 for문을 이용하여 끝자리부터 출력(다시 내림차순)한다.

if문의 조건을 만족하지못하면 -1출력

 

import java.util.*;

public class b10610 {

    public static void main(String[] args ) {
        Scanner in = new Scanner(System.in);
        String s = in.next();
        List<Integer> list = new ArrayList<>();
        int sum=0;

        for(int i=0; i<s.length(); i++) {
            sum+= s.charAt(i)-'0';
            list.add(s.charAt(i)-'0');
        }

        Collections.sort(list); //오름차순
         if(list.get(0)==0 && sum % 3 == 0) {
            for(int i = list.size()-1; i>=0; i--)
                System.out.print(list.get(i));
             }
            else{
                System.out.print(-1);
             }

    }
}

 

 

 

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

 

10610번: 30

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

www.acmicpc.net