๐Ÿ•๏ธ ICPC Sinchon/Greedy

[BOJ][C++] ๋ฐฑ์ค€ 1715๋ฒˆ: ์นด๋“œ ์ •๋ ฌํ•˜๊ธฐ (Gold IV)

์„ ๋‹ฌ 2025. 2. 10. 23:46
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

์ •๋ ฌ๋œ ๋‘ ๋ฌถ์Œ์˜ ์ˆซ์ž ์นด๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž. ๊ฐ ๋ฌถ์Œ์˜ ์นด๋“œ์˜ ์ˆ˜๋ฅผ 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๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์–‘์˜ ์ •์ˆ˜์ด๋‹ค.

์ถœ๋ ฅ

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

 

ํ’€์ด

๊ทธ๋ฆฌ๋””..๋ผ๊ธฐ์—” ์‹œ๋ฎฌ๋ ˆ์ด์…˜์— ๋” ๊ฐ€๊นŒ์šด..?

 

๊ฐ€์žฅ ์ž‘์€๊ฑฐ ๋‘๊ฐœ ๋ฌถ๊ณ ,

๊ทธ ๋ฌถ์€ ํšŸ์ˆ˜ sum์— ๋”ํ•˜๊ณ 

๋ฌถ์€๊ฑฐ ๋‹ค์‹œ ์˜ฌ๋ ค๋†“๊ณ 

๋‹ค์‹œ ๊ฐ€์žฅ ์ž‘์€๊ฑฐ ๋‘๊ฐœ ๋ฌถ๊ณ ,

๊ทธ ๋ฌถ์€ ํšŸ์ˆ˜ ... (์ดํ•˜ ์ƒ๋žต)

 

// ํ’€์ด : https://whkakrkr.tistory.com

#include <iostream>
#include <queue>

using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
	cout.tie(NULL);
	cin.tie(NULL);
	
	// ์ตœ์†Œ ํž™
	priority_queue<int, vector<int>, greater<int>> pq;
	    
	int n, a;
	cin >> n;
	for(int i=0; i<n; i++) {
	    cin >> a;
	    pq.push(a);
	}
	
	int sum = 0;
	while(pq.size() > 1) {
	   a = pq.top();
	   pq.pop();
	   a += pq.top();
	   pq.pop();
	   sum += a;
	   pq.push(a);
	}

	cout << sum;

    return 0;
}
๋ฐ˜์‘ํ˜•