๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 1715_์นด๋“œ ์ •๋ ฌํ•˜๊ธฐ

๋ฟŒ์•ผ._. 2022. 8. 6. 22:08

Gold IV

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/1715)

<์นด๋“œ ์ •๋ ฌํ•˜๊ธฐ>

๋ฌธ์ œ 

 

์ •๋ ฌ๋œ ๋‘ ๋ฌถ์Œ์˜ ์ˆซ์ž ์นด๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž. ๊ฐ ๋ฌถ์Œ์˜ ์นด๋“œ์˜ ์ˆ˜๋ฅผ A, B๋ผ ํ•˜๋ฉด ๋ณดํ†ต ๋‘ ๋ฌถ์Œ์„ ํ•ฉ์ณ์„œ ํ•˜๋‚˜๋กœ ๋งŒ๋“œ๋Š” ๋ฐ์—๋Š” A+B ๋ฒˆ์˜ ๋น„๊ต๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผํ…Œ๋ฉด, 20์žฅ์˜ ์ˆซ์ž ์นด๋“œ ๋ฌถ์Œ๊ณผ 30์žฅ์˜ ์ˆซ์ž ์นด๋“œ ๋ฌถ์Œ์„ ํ•ฉ์น˜๋ ค๋ฉด 50๋ฒˆ์˜ ๋น„๊ต๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
๋งค์šฐ ๋งŽ์€ ์ˆซ์ž ์นด๋“œ ๋ฌถ์Œ์ด ์ฑ…์ƒ ์œ„์— ๋†“์—ฌ ์žˆ๋‹ค. ์ด๋“ค์„ ๋‘ ๋ฌถ์Œ์”ฉ ๊ณจ๋ผ ์„œ๋กœ ํ•ฉ์ณ๋‚˜๊ฐ„๋‹ค๋ฉด, ๊ณ ๋ฅด๋Š” ์ˆœ์„œ์— ๋”ฐ๋ผ์„œ ๋น„๊ต ํšŸ์ˆ˜๊ฐ€ ๋งค์šฐ ๋‹ฌ๋ผ์ง„๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 10์žฅ, 20์žฅ, 40์žฅ์˜ ๋ฌถ์Œ์ด ์žˆ๋‹ค๋ฉด 10์žฅ๊ณผ 20์žฅ์„ ํ•ฉ์นœ ๋’ค, ํ•ฉ์นœ 30์žฅ ๋ฌถ์Œ๊ณผ 40์žฅ์„ ํ•ฉ์นœ๋‹ค๋ฉด (10 + 20) + (30 + 40) = 100๋ฒˆ์˜ ๋น„๊ต๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ 10์žฅ๊ณผ 40์žฅ์„ ํ•ฉ์นœ ๋’ค, ํ•ฉ์นœ 50์žฅ ๋ฌถ์Œ๊ณผ 20์žฅ์„ ํ•ฉ์นœ๋‹ค๋ฉด (10 + 40) + (50 + 20) = 120๋ฒˆ์˜ ๋น„๊ต๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ๋œ ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์ด๋‹ค.
N๊ฐœ์˜ ์ˆซ์ž ์นด๋“œ ๋ฌถ์Œ์˜ ๊ฐ๊ฐ์˜ ํฌ๊ธฐ๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ์ตœ์†Œํ•œ ๋ช‡ ๋ฒˆ์˜ ๋น„๊ต๊ฐ€ ํ•„์š”ํ•œ์ง€๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

 

์ž…๋ ฅ

 

์ฒซ์งธ ์ค„์— N์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 100,000) ์ด์–ด์„œ N๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ์ˆซ์ž ์นด๋“œ ๋ฌถ์Œ์˜ ๊ฐ๊ฐ์˜ ํฌ๊ธฐ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ˆซ์ž ์นด๋“œ ๋ฌถ์Œ์˜ ํฌ๊ธฐ๋Š” 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์–‘์˜ ์ •์ˆ˜์ด๋‹ค.

 

 

์ถœ๋ ฅ 

 

์ฒซ์งธ ์ค„์— ์ตœ์†Œ ๋น„๊ต ํšŸ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

๋ฌธ์ œ ํ’€์ด

   - my solution (JAVA)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;

public class _1715_ {
	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		
		int n=Integer.parseInt(bf.readLine());
		PriorityQueue<Integer> priorityqueue=new PriorityQueue<>(); 
		
		for(int i=0; i<n; i++) {
			priorityqueue.add(Integer.parseInt(bf.readLine()));
		}
		
		int result=0;
		while(priorityqueue.size()>1) {
			int temp=priorityqueue.poll()+priorityqueue.poll();
			result+=temp;
			priorityqueue.add(temp);
		}
		System.out.println(result);
	}
}

 

  • ์ž…๋ ฅ๋ฐ›์€ ํ›„ ์šฐ์„ ์ˆœ์œ„ ํ์— ์ €์žฅ
  • ์šฐ์„ ์ˆœ์œ„ ํ์˜ ํฌ๊ธฐ๊ฐ€ 1๋ณด๋‹ค ํด ๋•Œ ์นด๋“œ ๋ฌถ์Œ์„ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Œ
    • ์šฐ์„ ์ˆœ์œ„ ํ์ด๊ธฐ ๋•Œ๋ฌธ์— poll๋กœ ๊บผ๋‚ด๋ฉด ์ž‘์€ ๊ฐ’์„ ๊บผ๋‚ผ ์ˆ˜ ์žˆ์Œ
    • 2๊ฐœ๋ฅผ ๊บผ๋‚ด ํ•ฉ์„ ๊ตฌํ•œ ํ›„ result์— ๋”ํ•ด์ฃผ๊ณ  ์šฐ์„ ์ˆœ์œ„ ํ์—๋„ ๋‹ค์‹œ ๋„ฃ์–ด์คŒ
    • ๋‹ค์Œ ๊ฐ’์„ ๊ณ„์‚ฐํ•  ๋•Œ ๋ฐฉ๊ธˆ ๊ตฌํ•œ ๊ฐ’๋ณด๋‹ค ์ž‘์€ ๊ฐ’์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ

 

โ“ ์ฒ˜์Œ์— ์™œ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ–ˆ๋Š”๊ฐ€?

๋‹จ์ˆœํžˆ ๋ฐฐ์—ด์— ์ €์žฅํ•œ ํ›„ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ž์—์„œ๋ถ€ํ„ฐ ๊ณ„์†ํ•ด์„œ ๋”ํ•ด์ฃผ๋ฉด ๋˜๋Š” ๋ฌธ์ œ์ธ ์ค„ ์•Œ์•˜๋‹ค.

ํ•˜์ง€๋งŒ,  ์นด๋“œ ๋ฌถ์Œ์˜ ์ˆ˜๊ฐ€ ๋งŽ์„ ๋•Œ ๋ฐฉ๊ธˆ ๊ตฌํ•œ ๊ฐ’ ๋ณด๋‹ค ์ž‘์€ ๊ฐ’๋“ค์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„์†ํ•ด์„œ ์ž‘์€ ๊ฐ’์„ ์ฐพ์•„์ค˜์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

โ“ 1์„ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•˜์„ ๋•Œ?

๋‹น์—ฐํžˆ 1๋กœ ์ž…๋ ฅ๋ฐ›์€ ์นด๋“œ ๋ฌถ์Œ์˜ ์ˆ˜๊ฐ€ ๋‹ต์ธ์ค„ ์•Œ์•˜๋‹ค. ํ•˜์ง€๋งŒ 1์„ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์œผ๋ฉด ์นด๋“œ ๋ฌถ์Œ๋ผ๋ฆฌ ๋น„๊ตํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋‹ต์€ 0์ด ์ถœ๋ ฅ๋˜์–ด์•ผ ํ–ˆ๋‹ค.

 


์ƒ๊ฐ๐Ÿค”

 

๋ฌธ์ œ๋งŒ ๋ณด๊ณ  ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์„๊นŒ..