Algorithm
[BFS] 백준-10610 30 실버4
차노도리
2023. 4. 11. 14:44
백준-10610 : 30
https://www.acmicpc.net/problem/10610
10610번: 30
어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한
www.acmicpc.net
아이디어
- 30의 배수 3의 배수이면서 10의 배수
- 3의 배수 조건 : 각자리 합이 3의배수
- 10의배수 조건 1의 자리의 숫자가 0
풀의
- 숫자를 입력받은 후 각자리 합을 더하면서 우선순위 큐에 넣는다.
- 우선순위 큐에서 꺼낸면서 결과에 더한 후 1의 자리가 0인지 확인한다.
코드 (java)
package Bfs.Baejoon2437;
import java.util.*;
public class Baejoon2437 {
public static void main(String[] args) {
String result = "";
Scanner sc = new Scanner(System.in);
String num = sc.nextLine();
int sum = 0;
PriorityQueue<Integer> pq = new PriorityQueue<>();
for (int i = 0; i < num.length(); i++) {
int tempNum = num.charAt(i) - '0';
pq.add(tempNum);
sum = (sum + tempNum) % 3;
}
if (sum % 3 != 0) {
System.out.println(-1);
} else {
while (!pq.isEmpty()) {
result = pq.poll() + result;
}
if (result.charAt(result.length() - 1) == '0') {
System.out.println(result);
} else {
System.out.println(-1);
}
}
}
}