백준/우선순위 큐

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로 받으면 틀린다.

주의하기

 

우선순위 큐를 잘 몰라서 참고 했다.

참고 자료 : 

https://skwzz.tistory.com/49

 

[백준 15903] 카드 합체 놀이

우선순위 큐를 사용하여 문제를 풀었습니다. 우선순위큐만 이야기하면 따로 설명은 없어도 될거같습니다. 반복횟수만큼 큐에서 두개를 빼고 더한값을 큐에 두번 넣어주면 되니깐용 아 그리고 i

skwzz.tistory.com