컴퓨터 공학/백준
[백준] JAVA 자바 : 30 (10610번)
kim-dev
2024. 3. 14. 16:13
반응형
입력받은 수가 30의 배수라면, 그 수의 자릿수 조합으로 만들 수 있는 최댓값을 출력하는 문제이다.
나는 처음에 N이 최대 10^5개의 숫자로 구성된다는 말이, N의 최댓값이 100,000이라는 줄 알아서 그냥 int로 결과값을 만들었는데 계속 틀려서... 질문 게시판을 보니까 이게 자릿수 최댓값이 10만 개라는 뜻이었다...
그래서 결과값을 StringBuilder으로 처리해 줬다... 근데 시간이 꽤 오래 걸리는 이슈...ㅋㅋ
난 어떻게 풀었냐면, N의 모든 자릿수를 돌면서 sum에 더해준다. 그 과정에서 0의 개수도 체크해 준다.
그리고 조회한 자릿수는 우선순위 큐에 내림차순으로 넣어 준다.
다 돌고 난 후 sum이 3의 배수이면서 0이 하나 이상 있다면, 그건 30의 배수이므로 우선순위 큐에서 하나씩 빼서 StringBuilder에 append한 값을 출력해주면 된다.
import java.lang.StringBuilder;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.PriorityQueue;
import java.util.Collections;
public class Thirty {
public static int stoi(String str) {
return Integer.parseInt(str);
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PriorityQueue<Character> pQ = new PriorityQueue<>(Collections.reverseOrder()); // 내림차순으로 우선순위 큐
String N = br.readLine();
long sum=0;
long isZero = 0;
for (int i=0; i<N.length(); i++) {
char tmp = N.charAt(i);
pQ.offer(tmp);
int tmpInt = tmp - '0';
if (tmpInt == 0) {
isZero++;
}
sum += tmpInt;
}
if (sum != 0 && sum%3 == 0 && isZero > 0) { // 30의 배수라면
StringBuilder result = new StringBuilder();
long size = pQ.size();
for (long i=0; i<size; i++) {
result.append(pQ.poll());
}
System.out.println(result);
} else { // 30의 배수가 아니라면 -1을 출력
System.out.println(-1);
}
br.close();
}
}
로그인
www.acmicpc.net