https://www.acmicpc.net/problem/10610
1. 아이디어
30의 배수는 3의 배수면서 10의 배수라는 점을 활용하면 간단하게 해결할 수 있다.
3의 배수는 각 자릿수의 합이 3의 배수가 되고 10의 배수는 1의 자릿수가 0이라는 특징이 있는데 이 두가지를 모두 만족하면 30의 배수가 된다.
2. 문제풀이
각 자릿수를 저장하는 배열 nums, 0을 포함했는지 판단하는 변수 hasZero, 각 자릿수의 합을 저장하는 변수 sum을 선언하고 입력에 맞게 초기화해준다.
이후 0을 포함하면서 각 자릿수의 합이 3의 배수면 재배치로 30의 배수가 될 수 있으므로 nums를 정렬한 이후 역순으로 순회하며 가장 큰 수를 구해주고 30의 배수가 아니면 -1을 출력하는 방식으로 구현했다.
3. 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
String input = br.readLine();
int[] nums = new int[input.length()];
boolean hasZero = false;
int sum = 0;
for (int i = 0; i < input.length(); i++) {
int num = input.charAt(i) - '0';
if (num == 0) {
hasZero = true;
}
nums[i] = num;
sum += num;
}
if (hasZero && (sum % 3 == 0)) {
Arrays.sort(nums);
for (int i = nums.length - 1; i >= 0; i--) {
sb.append(nums[i]);
}
} else {
sb.append(-1);
}
bw.write(sb.toString());
bw.flush();
}
}
4. 후기
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 1085번 - 직사각형에서 탈출 [Java] (0) | 2024.12.05 |
---|---|
[백준] 14681번 - 사분면 고르기 [Java] (0) | 2024.12.05 |
[백준] 10250번 - ACM 호텔 [Java] (0) | 2024.12.04 |
[백준] 15965번 - K번째 소수 [Java] (1) | 2024.12.04 |
[백준] 1735번 - 분수 합 [Java] (0) | 2024.12.04 |