https://www.acmicpc.net/problem/2109
๋ฌธ์
ํ ์ ๋ช ํ ํ์์๊ฒ n(0 ≤ n ≤ 10,000)๊ฐ์ ๋ํ์์ ๊ฐ์ฐ ์์ฒญ์ ํด ์๋ค. ๊ฐ ๋ํ์์๋ d(1 ≤ d ≤ 10,000)์ผ ์์ ์์ ๊ฐ์ฐ์ ํด ์ฃผ๋ฉด p(1 ≤ p ≤ 10,000)๋งํผ์ ๊ฐ์ฐ๋ฃ๋ฅผ ์ง๋ถํ๊ฒ ๋ค๊ณ ์๋ ค์๋ค. ๊ฐ ๋ํ์์ ์ ์ํ๋ d์ p๊ฐ์ ์๋ก ๋ค๋ฅผ ์๋ ์๋ค. ์ด ํ์๋ ์ด๋ฅผ ๋ฐํ์ผ๋ก, ๊ฐ์ฅ ๋ง์ ๋์ ๋ฒ ์ ์๋๋ก ์ํ๊ฐ์ฐ์ ํ๋ ค ํ๋ค. ๊ฐ์ฐ์ ํน์ฑ์, ์ด ํ์๋ ํ๋ฃจ์ ์ต๋ ํ ๊ณณ์์๋ง ๊ฐ์ฐ์ ํ ์ ์๋ค.
์๋ฅผ ๋ค์ด ๋ค ๋ํ์์ ์ ์ํ p๊ฐ์ด ๊ฐ๊ฐ 50, 10, 20, 30์ด๊ณ , d๊ฐ์ด ์ฐจ๋ก๋ก 2, 1, 2, 1 ์ด๋ผ๊ณ ํ์. ์ด๋ด ๋์๋ ์ฒซ์งธ ๋ ์ 4๋ฒ ๋ํ์์ ๊ฐ์ฐ์ ํ๊ณ , ๋์งธ ๋ ์ 1๋ฒ ๋ํ์์ ๊ฐ์ฐ์ ํ๋ฉด 80๋งํผ์ ๋์ ๋ฒ ์ ์๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ n์ด ์ฃผ์ด์ง๋ค. ๋ค์ n๊ฐ์ ์ค์๋ ๊ฐ ๋ํ์์ ์ ์ํ p๊ฐ๊ณผ d๊ฐ์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ต๋๋ก ๋ฒ ์ ์๋ ๋์ ์ถ๋ ฅํ๋ค.
ํ์ด
์ ๋ ฌ๊ณผ ๋ธ๋ฃจํธํฌ์ค ๋ฌธ์ !
pay์ day๋ฅผ ์ ์ฅํ lecture class๋ฅผ ๋ง๋ค์๋ค. ์ด lecture์ ๊ธ์ก์ด ํฐ ์์๋ก, ๊ฐ์ผ๋ฉด ๋ ์ง๊ฐ ์์ ์์๋ก ์ ๋ ฌ๋๋๋ก ํ๋ค.
boolean ๋ฐฐ์ด๋ก lecture์ ๋ ์ง์์ ๊ฐ์ฐ์ด ๊ฐ๋ฅํ์ง ํ์ธํ๋ค.
โผ๏ธ ์ฒ์์๋ ๋ฌธ์ ๋ฅผ ์๋ชป ์ดํดํด์.... d์ ์๋ฏธ๊ฐ ๊ทธ ๋ ์ง์ ๊ฐ์ฐ์ด ๊ฐ๋ฅํ๊ฐ? ๋ผ๋ ๊ฒ์ธ์ง ์์๋ฐ์..
๊ทธ๊ฒ ์๋๋ผ d์ผ ์์ ๊ฐ์ฐ์ด ๊ฐ๋ฅํ๊ฐ!! ์ด๊ฒ์ด ์ค์ํ POINT
์ฝ๋
์ฒ์์ ๋ฌธ์ ๋ฅผ ์๋ชป์ดํดํด์ ํ๋ฆฐ ์ฝ๋....๐ญ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stringTokenizer;
int n = Integer.parseInt(br.readLine());
Map<Integer, Integer> univ = new HashMap<>();
while(n-- > 0){
stringTokenizer = new StringTokenizer(br.readLine());
int p = Integer.parseInt(stringTokenizer.nextToken());
int d = Integer.parseInt(stringTokenizer.nextToken());
if(univ.containsKey(d)){
int p1 = univ.get(d);
if(p1 < p)
univ.put(d, p);
else
continue;
}
else
univ.put(d, p);
}
long answer = 0;
Set<Integer> kSet = univ.keySet();
for(int k : kSet){
answer += univ.get(k);
}
System.out.println(answer);
}
}
์ฌ๋ฌ๋ฒ์ ์๋๋์ ๋ง์ ์ฝ๋;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;
public class Main_BOJ_2109_์ํ๊ฐ์ฐ{
static class lecture implements Comparable<lecture>{
int pay;
int day;
lecture(int pay, int day){
this.pay = pay;
this.day = day;
}
@Override
public int compareTo(lecture o) {
// TODO Auto-generated method stub
int result = o.pay - this.pay;
if(result == 0)
result = this.day - o.day;
return result;
}
}
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stringTokenizer;
int n = Integer.parseInt(br.readLine());
boolean[] days = new boolean[10001];
List<lecture> list = new ArrayList<>();
while(n-- > 0){
stringTokenizer = new StringTokenizer(br.readLine());
int p = Integer.parseInt(stringTokenizer.nextToken());
int d = Integer.parseInt(stringTokenizer.nextToken());
list.add(new lecture(p, d));
}
Collections.sort(list);
int answer = 0;
for(lecture l : list){
// lecture๋ฅผ ๊ธ์ก ๋ด๋ฆผ์ฐจ์ || ๋ ์ง ์ค๋ฆ์ฐจ์์ผ๋ก ํ๊ธฐ๋๋ฌธ์, ์ญ์์ผ๋ก ํ์ง์์ผ๋ฉด ๋์ค์ ๋์ค๋ day๊ฐ ์์ ๊ฐ์ฐ์ ๋ค์ด๊ฐ ์ ์์
for(int j = l.day ; j > 0 ; j--){
if(!days[j]){
days[j] = true;
answer += l.pay;
break;
}
}
}
System.out.println(answer);
}
}
'์๊ณ ๋ฆฌ์ฆ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค / BOJ 17406] ๋ฐฐ์ด ๋๋ฆฌ๊ธฐ 4 (0) | 2021.09.14 |
---|---|
[๋ฐฑ์ค / BOJ 18427] ํจ๊ป ๋ธ๋ก ์๊ธฐ (0) | 2021.09.14 |
[๋ฐฑ์ค / BOJ 2026] ์ํ (0) | 2021.09.14 |
[๋ฐฑ์ค / BOJ 20056] ๋ง๋ฒ์ฌ ์์ด์ ํ์ด์ด๋ณผ (0) | 2021.09.14 |
[๋ฐฑ์ค / BOJ 17069] ํ์ดํ ์ฎ๊ธฐ๊ธฐ 2 (0) | 2021.09.14 |