μ•Œκ³ λ¦¬μ¦˜/λ°±μ€€

[λ°±μ€€ / BOJ 2109] μˆœνšŒκ°•μ—°

KIMHYEYUN 2021. 9. 14. 20:36
λ°˜μ‘ν˜•

 

https://www.acmicpc.net/problem/2109

 

2109번: μˆœνšŒκ°•μ—°

ν•œ μ €λͺ…ν•œ ν•™μžμ—κ²Œ n(0 ≤ n ≤ 10,000)개의 λŒ€ν•™μ—μ„œ κ°•μ—° μš”μ²­μ„ ν•΄ μ™”λ‹€. 각 λŒ€ν•™μ—μ„œλŠ” d(1 ≤ d ≤ 10,000)일 μ•ˆμ— μ™€μ„œ 강연을 ν•΄ μ£Όλ©΄ p(1 ≤ p ≤ 10,000)만큼의 κ°•μ—°λ£Œλ₯Ό μ§€λΆˆν•˜κ² λ‹€κ³  μ•Œλ €μ™”λ‹€.

www.acmicpc.net

문제


ν•œ μ €λͺ…ν•œ ν•™μžμ—κ²Œ 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);
    }
}

 

728x90
λ°˜μ‘ν˜•