알고리즘/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