๐ ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/17503
๋ฌธ์ ์์ฝ
- N์ผ ๋์ ์๋ก ๋ค๋ฅธ N๊ฐ์ ๋งฅ์ฃผ๋ฅผ ๋ง์ ์ผ ํจ.
- ๋งฅ์ฃผ์ ์ ํธ๋ ํฉ์ด M ์ด์์ด์ด์ผ ํจ.
- ๋์๊ฐ ๊ฐ ๋ ๋ฒจ๋ณด๋ค ๋์ผ๋ฉด ๋ง์ค ์ ์์.
- ๊ฐ๋ฅํ ๋์์ ์ต์๊ฐ์ ์ถ๋ ฅ.
๐ ํ์ด ๋ฐ ์๊ณ ๋ฆฌ์ฆ
- ๋งฅ์ฃผ ๋ฆฌ์คํธ๋ฅผ ๋์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
- ๋์๊ฐ ๋ฎ์ ๋งฅ์ฃผ๋ถํฐ ์ ํํ์ฌ ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง ํ์ธ.
- ์ฐ์ ์์ ํ(PriorityQueue) ํ์ฉ
- N๊ฐ์ ๋งฅ์ฃผ๋ฅผ ์ ์งํ๋ฉฐ, ๊ฐ์ฅ ๋ฎ์ ์ ํธ๋๋ฅผ ๊ฐ์ง ๋งฅ์ฃผ๋ ์ ๊ฑฐ.
- PriorityQueue<Integer>์ ๋งฅ์ฃผ ์ ํธ๋(prefer)๋ฅผ ์ ์ฅํ์ฌ ์ต์ ์ ํธ๋๋ฅผ ๋น ๋ฅด๊ฒ ์ ๊ฑฐ.
- ๋์๋ฅผ ํ๋์ฉ ์ฆ๊ฐ์ํค๋ฉฐ ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง ํ์ธ
- ํ์ฌ ๋์๊น์ง ๋ง์ค ์ ์๋ ๋งฅ์ฃผ๋ค ์ค์์ N๊ฐ๋ฅผ ์ ํ.
- N๊ฐ๋ฅผ ์ ํํ ํ, ์ ํธ๋ ํฉ์ด M ์ด์์ธ์ง ์ฒดํฌ.
- ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด ํ์ฌ ๋์๊ฐ ๊ฐ๋ฅํ ์ต์๊ฐ.
๐ก ์ฝ๋
import java.util.*;
public class Baekjoon_17503 {
static class Beer {
int prefer, alcohol;
Beer(int prefer, int alcohol) {
this.prefer = prefer;
this.alcohol = alcohol;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // ๋ง์
์ผ ํ๋ ๋งฅ์ฃผ ์
int m = sc.nextInt(); // ์ ํธ๋ ์ต์ ํฉ
int k = sc.nextInt(); // ๋งฅ์ฃผ ์ข
๋ฅ
List<Beer> beers = new ArrayList<>();
for (int i = 0; i < k; i++) {
beers.add(new Beer(sc.nextInt(), sc.nextInt()));
}
// 1. ๋์(alcohol) ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ (๋์๊ฐ ๊ฐ๋ค๋ฉด ์ ํธ๋ ํฐ ์)
beers.sort((a, b) -> a.alcohol == b.alcohol ? b.prefer - a.prefer : a.alcohol - b.alcohol);
PriorityQueue<Integer> pq = new PriorityQueue<>(); // ์ต์ ํ (์ ํธ๋)
int sum = 0, ans = -1;
// 2. ๋์๊ฐ ๋ฎ์ ์์๋๋ก ๋งฅ์ฃผ๋ฅผ ์ ํ
for (Beer beer : beers) {
pq.add(beer.prefer);
sum += beer.prefer;
// 3. N๊ฐ ์ด๊ณผํ๋ฉด ๊ฐ์ฅ ๋ฎ์ ์ ํธ๋ ์ ๊ฑฐ
if (pq.size() > n) {
sum -= pq.poll();
}
// 4. ์ ํํ N๊ฐ๋ฅผ ์ ํํ์ผ๋ฉฐ, ์ ํธ๋ ํฉ์ด M ์ด์์ด๋ฉด ๋์ ๊ธฐ๋ก ํ ์ข
๋ฃ
if (pq.size() == n && sum >= m) {
ans = beer.alcohol;
break;
}
}
System.out.println(ans);
}
}
๐ ์๊ฐ ๋ณต์ก๋ ๋ถ์
- ๋งฅ์ฃผ ์ ๋ ฌ: O(K log K)
- ์ฐ์ ์์ ํ ๊ด๋ฆฌ: O(K log N)
- ์ ์ฒด ์๊ฐ ๋ณต์ก๋: O(K log K + K log N), ์ต๋ 10^5 log 10^5 ์ ๋๋ก ์ถฉ๋ถํ ๊ฐ๋ฅ.
'์๊ณ ๋ฆฌ์ฆ(JAVA)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 1946 "์ ์ ์ฌ์" (JAVA) (0) | 2025.02.15 |
---|---|
๋ฐฑ์ค 19598 "์ต์ ํ์์ค ๊ฐ์" (JAVA) (0) | 2025.02.14 |
๋ฐฑ์ค 1780 "์ข ์ด์ ๊ฐ์" (JAVA) (0) | 2025.02.08 |
๋ฐฑ์ค 1992 "์ฟผ๋ํธ๋ฆฌ" (JAVA) (0) | 2025.02.08 |
๋ฐฑ์ค 15686 "์นํจ ๋ฐฐ๋ฌ" (JAVA) (0) | 2025.02.07 |