1. 유형
그리디, 우선순위큐
2. 풀이
문제에서 요구하는 값이 가장 작으려면
매 상황마다 가장 작은 슬라임 2개를 합성하면 가장 작은 결과를 얻는게 가능하다.
이때 사용하는 자료구조가 우선순위큐이다.
문제에서 가장 어려운 부분은 숫자의 범위 초과이다.
아래처럼 mod연산을 통해서 long타입을 넘길거 같으면 나머지 연산을 해야한다.
java를 쓰면 시간초과가 날 수 있다.
테스터 케이스를 전부다 돌기 때문이다. 이때 StringBuilder를 사용해서 마지막에 한번만
출력할 수 있도록 한다.
3. 코드
package 구현;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Beak_전생했더니슬라임연구자였던건에대하여 {
static int mod = 1000000007;
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(in.readLine(), " ");
int T = Integer.valueOf(st.nextToken());
StringBuilder sb = new StringBuilder();
for (int tc = 1; tc <= T; tc++) {
st = new StringTokenizer(in.readLine(), " ");
int N = Integer.valueOf(st.nextToken());
PriorityQueue<Long> pq = new PriorityQueue<>();
st = new StringTokenizer(in.readLine(), " ");
for (int i = 0; i < N; i++) {
pq.add(Long.valueOf(st.nextToken()));
}
long res = 1;
while (!pq.isEmpty()) {
if (pq.size() == 1) {
break;
}
long val1 = pq.poll();
long val2 = pq.poll();
res = (res * ((val1 * val2)%mod)) % mod;
pq.add((val1 * val2));
}
sb.append(String.valueOf(res) + '\n');
}
System.out.println(sb);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준 - 2841] 실버2- 외계인의 기타 연주 (0) | 2020.11.27 |
---|---|
[백준 - 1238] 골드3 - 파티 (0) | 2020.11.14 |
[백준 - 15922] 골드5 - 아우으 우아으이야!! (0) | 2020.11.10 |
[백준 - 2931] 골드3 - 가스관 (구현) (0) | 2020.11.08 |
[백준 - 17281] 골드4 - ⚾ (구현) (0) | 2020.11.07 |