TIL(Today I Learned)

99클럽 코테 스터디 14일차 TIL + 백준29723 (브실이의 입시전략, java)

zincah 2025. 4. 17. 21:16
반응형

오늘의 학습 키워드

  • 정렬

문제 탐색하기

문제

 

문제 풀이 설계하기

https://coding-babo.tistory.com/195

 

99클럽 코테 스터디 13일차 TIL + 백준 1181 (단어 정렬, java)

오늘의 학습 키워드정렬문제 탐색하기문제 문제 풀이 설계하기문제를 풀기위해서는 주어진 조건에 따라 문자열을 정렬시켜 줘야합니다. 정렬 조건을 직접 제시하는 것으로 봐서 java의 Collections

coding-babo.tistory.com

 

위 블로그 글에서 풀이한 문제처럼 Collections 를 활용해서 문제를 풀이하면 됩니다.

오름차순, 내림차순 모두 정렬해서 값을 구해야하기때문에 정렬을 2번 구현해주었습니다.

 

코드

package backjun;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Boj29723 {

    static int openScore;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());

        HashMap<String, Integer> subject = new HashMap<>();
        for(int i=0; i<N; i++){
            st = new StringTokenizer(br.readLine());
            subject.put(st.nextToken(), Integer.parseInt(st.nextToken()));
        }

        for(int i=0; i<K; i++){
            openScore += subject.remove(br.readLine());
        }

        List<String> keySet = new ArrayList<>(subject.keySet());
        keySet.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return subject.get(o1).compareTo(subject.get(o2));
            }
        });

        List<String> keySetReverse = new ArrayList<>(subject.keySet());
        keySetReverse.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return subject.get(o2).compareTo(subject.get(o1));
            }
        });


        int maxScore = openScore;
        int minScore = openScore;

        int cnt = M-K;
        for(String key : keySet){
            if(cnt == 0) break;
            minScore += subject.get(key);
            cnt--;
        }

        cnt = M-K;
        for(String key : keySetReverse){
            if(cnt == 0) break;
            maxScore += subject.get(key);
            cnt--;
        }

        System.out.println(minScore + " " + maxScore);
    }
}

 

오늘의 회고

컬렉션 프레임워크에 익숙해져가고 있는 것 같습니다.
반응형