백준/우선순위 큐
15903 카드 합체 놀이
have a good time
2021. 10. 20. 19:35
https://www.acmicpc.net/problem/15903
15903번: 카드 합체 놀이
첫 번째 줄에 카드의 개수를 나타내는 수 n(2 ≤ n ≤ 1,000)과 카드 합체를 몇 번 하는지를 나타내는 수 m(0 ≤ m ≤ 15×n)이 주어진다. 두 번째 줄에 맨 처음 카드의 상태를 나타내는 n개의 자연수 a1,
www.acmicpc.net
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
StringTokenizer st1 = new StringTokenizer(br.readLine(), " ");
PriorityQueue<Long> card = new PriorityQueue<>();
for(int i =0; i<N;i++) {
card.add(Long.parseLong(st1.nextToken()));
}
for(int i=0; i<M;i++) {
long first = card.poll();
long second = card.poll();
second+=first;
card.add(second);
card.add(second);
}
long sum =0;
for(int i=0; i<N;i++) {
sum+=card.poll();
}
System.out.println(sum);
}
}
예제에 나온대로
3 1
3 2 6
을 우선순위 큐에 입력하면,
카드에 적힌 값인 3 2 6 이
2 3 6 으로 정렬되어 저장된다.
(기본적으로 정수형에 대해서 오름차순 정렬)
카드에 적힌 값들을 long가 아닌 int로 받으면 틀린다.
주의하기
우선순위 큐를 잘 몰라서 참고 했다.
참고 자료 :
[백준 15903] 카드 합체 놀이
우선순위 큐를 사용하여 문제를 풀었습니다. 우선순위큐만 이야기하면 따로 설명은 없어도 될거같습니다. 반복횟수만큼 큐에서 두개를 빼고 더한값을 큐에 두번 넣어주면 되니깐용 아 그리고 i
skwzz.tistory.com