알고리즘/BOJ

[JAVA][BOJ][S5] 10610. 30

토요일 2022. 6. 21. 21:14
728x90
 

10610번: 30

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

www.acmicpc.net

문제

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

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

입력

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

출력

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

풀이

30의 배수는 3의 배수이면서 10의 배수여야 한다

10의 배수이기 위해서는 무조건 마지막 수가 0이어야 하므로 찾은 숫자들에 0이 무조건 하나 이상 있어야 하고,

3의 배수이기 위해서는 모든 자리의 수를 더했을 때 3의 배수여야 한다

코드

package 문제풀이;

import java.io.*;
import java.util.*;

public class S5_10610_30 {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		
		String N = br.readLine();
		
		char[] num = new char[N.length()];
		int sum = 0;
		boolean zero = false;
		
		for (int i = 0; i < N.length(); i++) {
			if(N.charAt(i) == '0') zero = true;
			num[i] = N.charAt(i);
			sum += N.charAt(i);
		}
		
		if(sum % 3 != 0 || !zero) {
			System.out.println(-1);
			return;
		}
		
		Arrays.sort(num);
		
		for (int i = num.length - 1; i >= 0; i--) {
			sb.append(num[i]);
		}
		
		System.out.println(sb);

	}

}

결과

 

#자바 #java #boj #백준 #알고리즘

728x90