이 문제에 대해서 나도 그렇고 여러 사람들이 오해하고 있는 부분이 있었다.
나는 입력된 숫자를 조합하여 30의 배수 중 가장 큰 수를 찾아야 하는 것으로 이해했다.
하지만 문제 해결법은 간단했다.
입력된 수의 조합으로 가장 큰 수를 만들고, 그 수가 30의 배수이면 되는 것이다.
따라서 입력받은 수를 하나씩 쪼개어 역순으로 정렬하면 예를들어 102는 210이 될 것이다.
이 210이 30의 배수이면 210을 출력한다. 아니라면 -1 출력한다.
이 문제를 통해 30의 배수를 구하는 방법을 새로이 알게 되었다.
만약 123의 수가 3의 배수인지 판별하려면 각 자리 수를 더했을 때 3의 배수이면 되는 것이다.
1+2+3=6이므로 6은 3의 배수이다. 즉, 123은 3의 배수가 된다.
이 문제는 30의 배수를 찾는 것이다.
따라서 숫자를 역순으로 정렬했을 때 가장 마지막 인덱스에 위치하는 수가 0이라면 30의 배수에도 만족할 것이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] num = br.readLine().split("");
String str = "";
int temp=0;
Arrays.sort(num, Collections.reverseOrder());
for(int i=0; i<num.length; i++) {
str +=num[i];
temp += Integer.parseInt(num[i]);
}
if(Integer.parseInt(num[num.length-1])!=0 || temp%3!=0) {
System.out.println("-1");
}else
System.out.println(str);
}
}
[출처]
https://www.acmicpc.net/problem/10610
'CODING > BAEKJOON' 카테고리의 다른 글
[BAEKJOON] 11047번 동전 0 (0) | 2022.02.08 |
---|---|
[BAEKJOON] 1051번 숫자 정사각형 (0) | 2022.02.08 |
[BAEKJOON] 1475번 방 번호 (0) | 2022.02.06 |
[BAEKJOON] 1436번 영화감독 숌 (0) | 2022.02.05 |
[BAEKJOON] 7568번 덩치 (0) | 2022.02.03 |
댓글