반응형
문제
어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어 한다.
미르코를 도와 그가 만들고 싶어 하는 수를 계산하는 프로그램을 작성하라.
입력
N을 입력받는다. N는 최대 105개의 숫자로 구성되어 있으며, 0으로 시작하지 않는다.
출력
미르코가 만들고 싶어하는 수가 존재한다면 그 수를 출력하라. 그 수가 존재하지 않는다면, -1을 출력하라
테스트 케이스
입력 1
3103210
출력 1
-1
입력 2
132131230
출력 2
-1
입력 3
36363969360
출력 3
99666633330
접근
1. 숫자 하나를 입력받습니다.
2. 해당 숫자를 재조합하여 최대의 숫자로 만듭니다(30의 배수로 만들 수 있다면)
30의 배수가 되기 위한 조건은 2가지가 있습니다.
1. 무조건 0으로 끝날 것. (30, 60 , 90, 120, 150, 180, 210, 240, 270, 300....)
2. 각 자리 숫자의 합이 3의 배수일 것(3+0=3, 6+0=6, 9+0=9, 1+2=3...)
이조건을 만족시킨다면 해당 숫자들을 역 정렬하여 출력하니 문제가 해결되었습니다.
코드
import java.awt.desktop.SystemEventListener;
import java.io.*;
import java.math.*;
import java.util.*;
public class Main {
/*
10610 problem
*/
public static void main(String[] args) throws NumberFormatException, IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
ArrayList<Integer> list = new ArrayList<>();
String str = br.readLine();
int sum = 0;
for(int i=0; i<str.length(); i++) {
list.add((int)str.charAt(i)-'0');
}
if(!list.contains(0)) {
System.out.println(-1);
return;
}
for(int i=0; i<str.length(); i++) {
sum += list.get(i);
}
if(sum%3 != 0) {
System.out.println(-1);
return;
}
Collections.sort(list,Comparator.reverseOrder());
for(int i=0; i<str.length();i++) {
bw.write(String.valueOf(list.get(i)));
}
bw.flush();
br.close();
bw.close();
}
}
주의
0으로 시작은 안 함
반응형
'공부 정리 > 백준' 카테고리의 다른 글
[백준] 자바 1292 쉽게 푸는 문제 (0) | 2021.09.07 |
---|---|
[백준] 자바 2563 색종이 (0) | 2021.09.06 |
[백준] 자바 11004 K번째 수 (0) | 2021.09.02 |
[백준] 자바 11723 집합 (0) | 2021.09.01 |
[백준] 자바 1476 날짜 계산 (0) | 2021.08.31 |
댓글