알고리즘 문제풀이/백준

[백준 10610] 30

taemin 2021. 5. 5.

www.acmicpc.net/problem/10610

 

10610번: 30

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

www.acmicpc.net

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;

public class BJ10610 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] sList = br.readLine().split("");
        int l = sList.length;
        int[] nums = new int[l];
        int total = 0;

        boolean chZero = false;
        for (int i = 0; i < l; i++) {
            if(sList[i].equals("0")){
                chZero = true;
            }
            total += Integer.parseInt(sList[i]);
        }

        if(!chZero){
            System.out.println(-1);
        }
        else{
            if(total%3 != 0){
                System.out.println(-1);
            } else{
                Arrays.stream(sList).sorted(Comparator.reverseOrder())
                        .forEach(System.out::print);
            }

        }
    }
}

풀이

30의 배수에는 규칙이 있다.

 

일단 10의 배수여야 하니 0을 포함해야 하고,

3의 배수여야 하니 각 자리수를 더한 합이 3의 배수여야 한다.

 

※각 배수들의 규칙

  • 2의 배수 판별법: 일의 자리수가 0,2,4,6,8 이면 2의 배수이다.
  •  
  • 3의 배수 판별법: 각 자리수의 합이 3의 배수이면 3의 배수이다.
  •  
  • 4의 배수 판별법: 끝의 두자리 수가 00이거나 4의 배수이면 4의 배수이다.
  •  
  • 5의 배수 판별법: 일의 자리수가 0,5 이면 5의 배수이다.
  •  
  • 6의 배수 판별법: 짝수이고, 각 자리수의 합이 3의 배수이면 6의 배수이다.
  •  
  • 8의 배수 판별법: 끝의 세자리 수가 000이거나 8의 배수이면 8의 배수이다.
  •  
  • 9의 배수 판별법: 각 자리수의 합이 9의 배수이면 9의 배수이다.

시간복잡도

O(N)

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준 2257] 화학식량  (0) 2021.05.07
[백준 5347] LCM (최소공배수)  (0) 2021.05.07
[백준1238] 파티  (0) 2021.05.05
[백준14465] 소가 길을 건너간 이유 5  (0) 2021.05.05
[백준1747] 소수&팰린드롬  (0) 2021.05.05

댓글