1. ๋ฌธ์ ์ค๋ช ๐
์ด๋ฒ ๋ฌธ์ ๋ ์กฐ๊ฑด์ด ์ง๊ด์ ์ด์ด์ ์ถ๊ฐ์ ์ธ ์ค๋ช ์๋ต
2. ์ ๊ทผ ๋ฐฉ์ ๐๏ธ
KEY WORD
: Greedy Algorithm
Greedy ์๊ณ ๋ฆฌ์ฆ์ ๋งค ์ ํ์ ์๊ฐ์ ์ต์ ์ ์ ํ์ ํด๋๊ฐ๋ ๊ฒ์ด ์ ์ฒด ๋ฌธ์ ์์ ๋ดค์ ๋๋ ์ต์ ์ด๋ผ๊ณ ๊ฐ์ ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ํด๋น ๋ฌธ์ ๋ ์ต์ํ์ ๋น๊ต๋ฅผ ์ํด์๋ ๋งค๋ฒ ์นด๋ ์๊ฐ ์ ์ ๋ฌถ์์ 2๊ฐ ๊ณจ๋ผ์ ํฉ์น๋ฉด์ ๋์๊ฐ์ผ ํ๋ค. ๊ทธ๋ ๊ธฐ์ Greedy ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํด์ผ ํ๋ค.
์ฌ๊ธฐ์ ์ฃผ์ํด์ผํ ์ ์ ํฉ์น ์นด๋ ๋ญ์น
๋ณด๋ค ์นด๋ ์๊ฐ ๋ ์์ ๊ธฐ์กด ์นด๋ ๋ญ์น
๊ฐ 2๊ฐ ์ด์ ์กด์ฌํ ์ ์๋ค๋ ๊ฒ์ด๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ๊ฐ ๋ฌธ์ ์ ์์ ์๋ ์ ๋์ ์์ด์ ๊ฐ๊ณผํ๊ธฐ ์ฝ๋ค. ์๋ฅผ ๋ค์ด๋ณด์.N = 6
์ด๊ณ ๊ฐ ์นด๋ ๋ฌถ์์ ์นด๋ ์๋ [10, 15, 17, 19, 24, 25]
๋ผ๊ณ ํด๋ณด์. ์ฒ์์ผ๋ก ๋น๊ตํ ์นด๋๋ ์ ์ผ ์์ 2๊ฐ, 10๊ณผ 15์ผ ๊ฒ์ด๋ค. ํฉ์น๋ฉด 25๊ฐ ๋๋ค. ๋ฌธ์ ์ ์์ ์์๋ ํฉ์น ์ด ์๋ฅผ ๊ณ์ ์ด์ฉํด๋ ๋ฌธ์ ๊ฐ ํ๋ฆฌ์ง๋ง, ์ง๊ธ์ ์์ ์์๋ ๋ค์์ผ๋ก ๊ณ ๋ฅผ ๋ ์๋ 17๊ณผ 19์ด๋ค!ํฉ์น ์นด๋ ๋ญ์น๋ฅผ ๋งค๋ฒ ๋น๊ต ๋์์ผ๋ก ์์ ํ๊ณ ๋น๊ต ์๋๋ ์ฃผ์ด์ง ์นด๋ ๋ญ์น ์ค ์ ์ผ ์์ ๊ฒ์ ์ฌ์ฉ
ํ๋ ๊ฒฝ์ฐ ๋น๊ต ์๋
(10 + 15) + (25 + 17) + (42 + 19) + (61 + 24) + (85 + 25) = 323 ์ด ๋๋ค.
ํ์ง๋ง ํฉ์น ์นด๋ ๋ญ์น๋ ๋น๊ต ๋์์ ๋ฃ์ด์ ๋งค๋ฒ ์ ์ผ ์์ ์นด๋ ๋ญ์น 2๊ฐ์ง๋ฅผ ๊ณ ๋ฅธ๋ค๋ฉด
๋น๊ต ์๋
(10 + 15) + (17 + 19) + (25+ 24) + (25 + 36) + (49 + 61) = 281 ์ด ๋๋ค.
๋ฐ๋ผ์ Array ์ ๋ ฌ ์ดํ ๋จ์ ํ์ ๋ฐฉ์์ด ์๋ PriorityQueue
๋ฅผ ํ์ฉํ Greedy Algorithm์ ๊ตฌํํด์ผ ํ๋ค. ๊ตฌํ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ๋ค.
์์ธ ์ฒ๋ฆฌ ์ ์
: N = 1์ธ ๊ฒฝ์ฐ ๋น๊ตํ ํ์๊ฐ ์์ผ๋ฏ๋ก 0 ์ถ๋ ฅ, N = 2 ์ธ ๊ฒฝ์ฐ ๋ ๊ฐ ํฉํด์ ๋ฐ๋ก ์ถ๋ ฅ์ด๊ธฐ๊ฐ ์ค์
: ์ค๋ฆ์ฐจ์ ์ ๋ ฌ PriorityQueue์ ๋ชจ๋ ์นด๋ ๋ฌถ์์ ๋ฃ๊ณ , ์ ์ผ ์์ ๊ฐ 2๊ฐ๋ฅผ ๋นผ๋ด์ ์๋ก ๋ํ๋ค. ๋ํ ์๋ ๋น๊ต ๋์์์ผ๋ก ๋ค์ ์ง์ด ๋ฃ๋๋ค.๋ฐ๋ณต
: ๋ชจ๋ ์นด๋๊ฐ ๋ํด์ ธ์ PrirorityQueue์์ ๊ฐ์ด 1๊ฐ๊ฐ ๋จ์ ๋๊น์ง ๊ฐ์ 2๊ฐ ๋นผ๋ด์ ๋ํ๊ณ ๋ค์ ์ง์ด๋ฃ๊ธฐ๋ฅผ ๋ฐ๋ณตํ๋ค.- ์ด๋๊น์ง ๋์๋ ๋ชจ๋ ๋น๊ตํ์๋ฅผ ๋์ ํ์ฌ ์ถ๋ ฅํ๋ค.
3. ์ฝ๋ ์๊ฐ ๐
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
PriorityQueue<Integer> pq = new PriorityQueue<>();
for(int i = 0; i < N; i++){
pq.offer(Integer.parseInt(br.readLine()));
}
if(pq.size() == 1) {
System.out.println(0);
return;
}
int prev = pq.poll()+ pq.poll();
pq.offer(prev);
int acc = prev;
while (pq.size() >= 2){
int A = pq.poll();
int B = pq.poll();
int plus = A + B;
acc += plus;
pq.offer(plus);
}
System.out.println(acc);
}
}
4. ๋ฐฐ์ด ๊ฒ๋ค ๐ฏ
๋ฐ๋ก๋ฅผ ์๊ฐํ๋ ์ฌ๊ณ
๋ด๊ฐ ์ค๋ช ํ๋ ์ฃผ์ ์ฌํญ์ ๊ฐ๊ณผํด์ ๋ฌธ์ ํ์ด๋ฅผ ๋ง์ด ํค๋งธ๋ค. ๋ฐ๋ก๋ฅผ ํผ์ ์๊ฐํด๋ณด๋ ค ํ๋๋ฐ ๋ ์ค๋ฅด์ง ์์, ๋ค๋ฅธ ์ฌ๋์ด ๊ฒ์ํ์ ์ ์ด๋์ ๋ฐ๋ก๋ฅผ ๋ณด๊ณ ๋ ์ฌ๋ ธ๋ค. ์ด๋ ๊ฒ ํ์ธํ๋ฉด์ ๋ฐ๋ก๋ฅผ ๋ง๋๋ ์๊ฐ์ ๊ธธ๋ฌ์ผ๊ฒ ๋ค.