n = 100,000 이고 모든 카드 묶음이 1,000일때 누적합은 int 값의 범위를 넘어설 수도 있을 것 같아서 PriorityQueue에 들어갈 데이터 type과 변수 ans를 각각 Long과 long 으로 선언해주었다.
문제를 다 풀고나서 실험해보니 1,668,928,000 으로 int 값의 범위인 –2,147,483,648 ~ 2,147,483,647 에 속하였다. 결과적으로는 헛수고였지만, 이런 것들까지 고려해서 코딩을 하는 것이 옳은것이 아닌가 생각한다.
이런 쉬운 문제일수록 간단한 실수로 인해 문제를 틀리는 것을 조심하자. while문 안에서 q.offer(ans);
를 해버리는 어이없는 실수를 한 덕에 10분 넘게 헤맸다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
import java.util.Queue;
class Main {
static long ans = 0l;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
Queue<Long> q = new PriorityQueue<>();
for (int i = 0; i < n; i++) {
q.offer(Long.parseLong(br.readLine()));
}
while (q.size() > 1) {
long x = q.poll();
long y = q.poll();
ans = ans + x + y;
q.offer(x + y);
}
System.out.println(ans);
}
}