โจ ์ฐ์ ์์ ํ & ์ ๋ ฌ
https://www.acmicpc.net/problem/1202
1202๋ฒ: ๋ณด์ ๋๋
์ฒซ์งธ ์ค์ N๊ณผ K๊ฐ ์ฃผ์ด์ง๋ค. (1 โค N, K โค 300,000) ๋ค์ N๊ฐ ์ค์๋ ๊ฐ ๋ณด์์ ์ ๋ณด Mi์ Vi๊ฐ ์ฃผ์ด์ง๋ค. (0 โค Mi, Vi โค 1,000,000) ๋ค์ K๊ฐ ์ค์๋ ๊ฐ๋ฐฉ์ ๋ด์ ์ ์๋ ์ต๋ ๋ฌด๊ฒ Ci๊ฐ ์ฃผ์ด์ง๋ค. (1 โค Ci
www.acmicpc.net
๐ ๊ณ ๋ คํด์ผํ ์
- ํ์น ์ ์๋ ๋ณด์ ๊ฐ๊ฒฉ์ ์ต๋์ ํฉ์ ๊ตฌํด์ผ ํ๋ค.
- ๋ณด์์ ๊ฐ์ <= 30๋ง
- ๊ฐ๋ฐฉ์ ๊ฐ์ <= 30๋ง
- ๊ฐ๋ฐฉ์ ๋ด์ ์ ์๋ ๋ฌด๊ฒ <= 1์ต
- ๋ณด์์ ๋ฌด๊ฒ <= 100๋ง
๐น๏ธ ํ์ด ๋ฐฉ๋ฒ
์ฒ์์๋ ๋ณด์ ๊ฐ๊ฒฉ์ ์ต๋ ํฉ์ ๊ตฌํด์ผํ๊ธฐ ๋๋ฌธ์ ๋ณด์์ ๊ฐ๊ฒฉ์ด ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ์ฅ๋๋๋ก ์ฐ์ ์์ ํ์ ๋ฃ์ด์ ๊ตฌํ๋ฉด ๋ ๊ฒ์ด๋ผ ์๊ฐํ์๋ค.
๊ทธ๋ฌ๋ ์ด ๋ฐฉ๋ฒ์ผ๋ก ์งํํ๋ฉด ๊ฐ๋ฐฉ์ด ๋ณด์์ ๋ฌด๊ฒ๋ฅผ ๋ด์ ์ ์๋์ง ์ ์ ์๊ฒ ๋๊ณ (๋ฌด๊ฒ๋ ๊ณ ๋ คํ์ง ์๊ณ ๊ฐ๊ฒฉ์ ๊ฐ ์์๋๋ก ์ ์ฅํ๊ธฐ ๋๋ฌธ)
๋ชจ๋ ๊ฐ๋ฐฉ์ ํ๋์ฉ ๋น๊ตํ์ฌ ๊ฐ๋ฐฉ์ ๋ด์ ์ ์๋์ง ํ์ธํ๋ ๋ฐฉ๋ฒ๋ฐ์ ๋ ์ค๋ฅด์ง ์์๋ค. ๐ ์ด ๋ฐฉ๋ฒ์ ๊ฐ๋ฐฉ์ ๊ฐ์์ ๋ณด์์ ๊ฐ์๊ฐ ์ต๋ 30๋ง ๊ฐ์ด๋ฏ๋ก ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค.
๊ทธ๋์ ๋ค์ ์๊ฐํด๋ณด์๋ค.
๋ณด์์ ๋ฌด๊ฒ๊ฐ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ์ฅ๋๋๋ก ํ๊ณ ๊ฐ๋ฐฉ ๋ํ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค.
๊ฐ๋ฐฉ์ ๋ด์ ์ ์๋ ๋ณด์ ์ค์ ์ต๋ ๊ฐ๊ฒฉ์ ๋ณด์์ total ๊ฐ์ ๋ํด์ฃผ๋ฉด ๋๋๋ฐ, ์ด ๋ ๋ณด์์ ๊ฐ๊ฒฉ์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ์ฅ๋๋๋ก ํ๋ ์ฐ์ ์์ ํ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ฝ๋๋ก ํ ๋ฒ ๊ตฌํํด๋ณด์.
long total=0;
PriorityQueue<Integer> jPrice = new PriorityQueue<>(Collections.reverseOrder()); // ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ
for(int i=0; i<K; i++){
while (!jewelry.isEmpty() && jewelry.peek().m <= bags[i]) {
jPrice.add(jewelry.poll().v);
}
if(!jPrice.isEmpty()) total+=jPrice.poll();
}
jewerly๋ ๋ณด์์ ๋ฌด๊ฒ๊ฐ ๋ด๋ฆผ์ฐจ์์ผ๋ก (๋ง์ฝ ๋ฌด๊ฒ๊ฐ ๊ฐ๋ค๋ฉด ๊ฐ๊ฒฉ์ด ์ค๋ฆ์ฐจ์) ์ ๋ ฌ๋์ด์๋ ์ฐ์ ์์ ํ์ด๋ค.
- K๋ ๊ฐ๋ฐฉ์ ๊ฐ์๋ก ํ์ฌ ๊ฐ๋ฐฉ์ ๋ด์ ์ ์๋ ๋ณด์๋ค์ while๋ฌธ์ ๋๋ฉฐ ํ์ํ๋ค.
- ๋ด์ ์ ์๋ค๋ฉด jPrice ์ฐ์ ์์ํ์ ๋ฃ์ด ๊ฐ๊ฒฉ์ด ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋๊ฒ๋ ํ๊ณ , ๋ง์ฝ ๋ณด์์ด ๋น์ด์๊ฑฐ๋ ๋ณด์์ ๋ฌด๊ฒ๋ฅผ ๊ฐ๋ฐฉ์ ๋ด์ ์ ์๋ค๋ฉด while๋ฌธ์ ๋น ์ ธ๋์จ๋ค.
- ํ์ฌ ๊ฐ๋ฐฉ์ ๋ด์ ์ ์๋ ๋ณด์ ์ค ๊ฐ์ฅ ๊ฐ๊ฒฉ์ด ๋์ ๊ฒ (์ฐ์ ์์ ํ์ ์ ์ผ ์์ ์๋ ๊ฒ ๋ฝ์๋ด๊ธฐ) ์ total์ ๋ํ๋ค.
๋ณด์์ ์ต๋ ๋ฌด๊ฒ๋ 100๋ง์ด๊ณ , ๊ฐ์๋ 30๋ง ๊ฐ์ด๋ฏ๋ก ๋ณด์์ ํฉ(total)์ long ํ์ ์ผ๋ก ์ ์ธํด์ผ ํ๋ค.
๐ฉโ๐ป ์ ์ฒด ์ฝ๋
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.*;
public class BOJ_1202_๋ณด์๋๋ {
static class Info implements Comparable<Info>{
int m, v;
public Info(int m, int v){
this.m=m;
this.v=v;
}
@Override
public int compareTo(Info o){
if(m==o.m) return o.v-v;
else return m-o.m;
}
}
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken()); // ๋ณด์ ๊ฐ์
int K = Integer.parseInt(st.nextToken()); // ๊ฐ๋ฐฉ ๊ฐ์
PriorityQueue<Info> jewelry = new PriorityQueue<>();
int[] bags = new int[K];
for(int i=0; i<N; i++){
st = new StringTokenizer(br.readLine());
int m = Integer.parseInt(st.nextToken());
int v = Integer.parseInt(st.nextToken());
jewelry.add(new Info(m, v)); // ๋ณด์์ ๋ฌด๊ฒ๊ฐ ๋ฎ์ ์์๋๋ก ์ ์ฅ (์ค๋ฆ์ฐจ์) -> ๋ฌด๊ฒ๊ฐ ๊ฐ๋ค๋ฉด ๊ฐ๊ฒฉ์ด ๋์ ์์๋๋ก ์ ์ฅ(๋ด๋ฆผ์ฐจ์)
}
for(int i=0; i<K; i++){
st = new StringTokenizer(br.readLine());
bags[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(bags); // ๊ฐ๋ฐฉ์ ๋ด์ ์ ์๋ ์ต๋ ๋ฌด๊ฒ๊ฐ ๋ฎ์ ์์๋๋ก ์ ์ฅ (์ค๋ฆ์ฐจ์)
long total=0;
PriorityQueue<Integer> jPrice = new PriorityQueue<>(Collections.reverseOrder()); // ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ
for(int i=0; i<K; i++){
while (!jewelry.isEmpty() && jewelry.peek().m <= bags[i]) {
jPrice.add(jewelry.poll().v);
}
if(!jPrice.isEmpty()) total+=jPrice.poll();
}
bw.write(total + " ");
bw.flush();
bw.close();
}
}
'์๊ณ ๋ฆฌ์ฆ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 2457 ๊ณต์ฃผ๋์ ์ ์ (0) | 2024.04.22 |
---|---|
[BOJ] 1238 ํํฐ - Java (0) | 2024.04.18 |
[BOJ] 2169 ๋ก๋ด ์กฐ์ข ํ๊ธฐ - Java (1) | 2024.04.16 |
[BOJ] 14503 ๋ก๋ด์ฒญ์๊ธฐ - Java (0) | 2024.04.11 |
[BOJ] 19238 ์คํํธ ํ์ - Java (0) | 2024.04.11 |
โจ ์ฐ์ ์์ ํ & ์ ๋ ฌ
https://www.acmicpc.net/problem/1202
1202๋ฒ: ๋ณด์ ๋๋
์ฒซ์งธ ์ค์ N๊ณผ K๊ฐ ์ฃผ์ด์ง๋ค. (1 โค N, K โค 300,000) ๋ค์ N๊ฐ ์ค์๋ ๊ฐ ๋ณด์์ ์ ๋ณด Mi์ Vi๊ฐ ์ฃผ์ด์ง๋ค. (0 โค Mi, Vi โค 1,000,000) ๋ค์ K๊ฐ ์ค์๋ ๊ฐ๋ฐฉ์ ๋ด์ ์ ์๋ ์ต๋ ๋ฌด๊ฒ Ci๊ฐ ์ฃผ์ด์ง๋ค. (1 โค Ci
www.acmicpc.net
๐ ๊ณ ๋ คํด์ผํ ์
- ํ์น ์ ์๋ ๋ณด์ ๊ฐ๊ฒฉ์ ์ต๋์ ํฉ์ ๊ตฌํด์ผ ํ๋ค.
- ๋ณด์์ ๊ฐ์ <= 30๋ง
- ๊ฐ๋ฐฉ์ ๊ฐ์ <= 30๋ง
- ๊ฐ๋ฐฉ์ ๋ด์ ์ ์๋ ๋ฌด๊ฒ <= 1์ต
- ๋ณด์์ ๋ฌด๊ฒ <= 100๋ง
๐น๏ธ ํ์ด ๋ฐฉ๋ฒ
์ฒ์์๋ ๋ณด์ ๊ฐ๊ฒฉ์ ์ต๋ ํฉ์ ๊ตฌํด์ผํ๊ธฐ ๋๋ฌธ์ ๋ณด์์ ๊ฐ๊ฒฉ์ด ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ์ฅ๋๋๋ก ์ฐ์ ์์ ํ์ ๋ฃ์ด์ ๊ตฌํ๋ฉด ๋ ๊ฒ์ด๋ผ ์๊ฐํ์๋ค.
๊ทธ๋ฌ๋ ์ด ๋ฐฉ๋ฒ์ผ๋ก ์งํํ๋ฉด ๊ฐ๋ฐฉ์ด ๋ณด์์ ๋ฌด๊ฒ๋ฅผ ๋ด์ ์ ์๋์ง ์ ์ ์๊ฒ ๋๊ณ (๋ฌด๊ฒ๋ ๊ณ ๋ คํ์ง ์๊ณ ๊ฐ๊ฒฉ์ ๊ฐ ์์๋๋ก ์ ์ฅํ๊ธฐ ๋๋ฌธ)
๋ชจ๋ ๊ฐ๋ฐฉ์ ํ๋์ฉ ๋น๊ตํ์ฌ ๊ฐ๋ฐฉ์ ๋ด์ ์ ์๋์ง ํ์ธํ๋ ๋ฐฉ๋ฒ๋ฐ์ ๋ ์ค๋ฅด์ง ์์๋ค. ๐ ์ด ๋ฐฉ๋ฒ์ ๊ฐ๋ฐฉ์ ๊ฐ์์ ๋ณด์์ ๊ฐ์๊ฐ ์ต๋ 30๋ง ๊ฐ์ด๋ฏ๋ก ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค.
๊ทธ๋์ ๋ค์ ์๊ฐํด๋ณด์๋ค.
๋ณด์์ ๋ฌด๊ฒ๊ฐ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ์ฅ๋๋๋ก ํ๊ณ ๊ฐ๋ฐฉ ๋ํ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค.
๊ฐ๋ฐฉ์ ๋ด์ ์ ์๋ ๋ณด์ ์ค์ ์ต๋ ๊ฐ๊ฒฉ์ ๋ณด์์ total ๊ฐ์ ๋ํด์ฃผ๋ฉด ๋๋๋ฐ, ์ด ๋ ๋ณด์์ ๊ฐ๊ฒฉ์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ์ฅ๋๋๋ก ํ๋ ์ฐ์ ์์ ํ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ฝ๋๋ก ํ ๋ฒ ๊ตฌํํด๋ณด์.
long total=0;
PriorityQueue<Integer> jPrice = new PriorityQueue<>(Collections.reverseOrder()); // ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ
for(int i=0; i<K; i++){
while (!jewelry.isEmpty() && jewelry.peek().m <= bags[i]) {
jPrice.add(jewelry.poll().v);
}
if(!jPrice.isEmpty()) total+=jPrice.poll();
}
jewerly๋ ๋ณด์์ ๋ฌด๊ฒ๊ฐ ๋ด๋ฆผ์ฐจ์์ผ๋ก (๋ง์ฝ ๋ฌด๊ฒ๊ฐ ๊ฐ๋ค๋ฉด ๊ฐ๊ฒฉ์ด ์ค๋ฆ์ฐจ์) ์ ๋ ฌ๋์ด์๋ ์ฐ์ ์์ ํ์ด๋ค.
- K๋ ๊ฐ๋ฐฉ์ ๊ฐ์๋ก ํ์ฌ ๊ฐ๋ฐฉ์ ๋ด์ ์ ์๋ ๋ณด์๋ค์ while๋ฌธ์ ๋๋ฉฐ ํ์ํ๋ค.
- ๋ด์ ์ ์๋ค๋ฉด jPrice ์ฐ์ ์์ํ์ ๋ฃ์ด ๊ฐ๊ฒฉ์ด ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋๊ฒ๋ ํ๊ณ , ๋ง์ฝ ๋ณด์์ด ๋น์ด์๊ฑฐ๋ ๋ณด์์ ๋ฌด๊ฒ๋ฅผ ๊ฐ๋ฐฉ์ ๋ด์ ์ ์๋ค๋ฉด while๋ฌธ์ ๋น ์ ธ๋์จ๋ค.
- ํ์ฌ ๊ฐ๋ฐฉ์ ๋ด์ ์ ์๋ ๋ณด์ ์ค ๊ฐ์ฅ ๊ฐ๊ฒฉ์ด ๋์ ๊ฒ (์ฐ์ ์์ ํ์ ์ ์ผ ์์ ์๋ ๊ฒ ๋ฝ์๋ด๊ธฐ) ์ total์ ๋ํ๋ค.
๋ณด์์ ์ต๋ ๋ฌด๊ฒ๋ 100๋ง์ด๊ณ , ๊ฐ์๋ 30๋ง ๊ฐ์ด๋ฏ๋ก ๋ณด์์ ํฉ(total)์ long ํ์ ์ผ๋ก ์ ์ธํด์ผ ํ๋ค.
๐ฉโ๐ป ์ ์ฒด ์ฝ๋
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.*;
public class BOJ_1202_๋ณด์๋๋ {
static class Info implements Comparable<Info>{
int m, v;
public Info(int m, int v){
this.m=m;
this.v=v;
}
@Override
public int compareTo(Info o){
if(m==o.m) return o.v-v;
else return m-o.m;
}
}
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken()); // ๋ณด์ ๊ฐ์
int K = Integer.parseInt(st.nextToken()); // ๊ฐ๋ฐฉ ๊ฐ์
PriorityQueue<Info> jewelry = new PriorityQueue<>();
int[] bags = new int[K];
for(int i=0; i<N; i++){
st = new StringTokenizer(br.readLine());
int m = Integer.parseInt(st.nextToken());
int v = Integer.parseInt(st.nextToken());
jewelry.add(new Info(m, v)); // ๋ณด์์ ๋ฌด๊ฒ๊ฐ ๋ฎ์ ์์๋๋ก ์ ์ฅ (์ค๋ฆ์ฐจ์) -> ๋ฌด๊ฒ๊ฐ ๊ฐ๋ค๋ฉด ๊ฐ๊ฒฉ์ด ๋์ ์์๋๋ก ์ ์ฅ(๋ด๋ฆผ์ฐจ์)
}
for(int i=0; i<K; i++){
st = new StringTokenizer(br.readLine());
bags[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(bags); // ๊ฐ๋ฐฉ์ ๋ด์ ์ ์๋ ์ต๋ ๋ฌด๊ฒ๊ฐ ๋ฎ์ ์์๋๋ก ์ ์ฅ (์ค๋ฆ์ฐจ์)
long total=0;
PriorityQueue<Integer> jPrice = new PriorityQueue<>(Collections.reverseOrder()); // ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ
for(int i=0; i<K; i++){
while (!jewelry.isEmpty() && jewelry.peek().m <= bags[i]) {
jPrice.add(jewelry.poll().v);
}
if(!jPrice.isEmpty()) total+=jPrice.poll();
}
bw.write(total + " ");
bw.flush();
bw.close();
}
}
'์๊ณ ๋ฆฌ์ฆ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 2457 ๊ณต์ฃผ๋์ ์ ์ (0) | 2024.04.22 |
---|---|
[BOJ] 1238 ํํฐ - Java (0) | 2024.04.18 |
[BOJ] 2169 ๋ก๋ด ์กฐ์ข ํ๊ธฐ - Java (1) | 2024.04.16 |
[BOJ] 14503 ๋ก๋ด์ฒญ์๊ธฐ - Java (0) | 2024.04.11 |
[BOJ] 19238 ์คํํธ ํ์ - Java (0) | 2024.04.11 |