오늘 Day 10을 끝으로 평일동안 필수로 풀어야하는 문제들을 모두 완료했다.

스파르타에서 제공하는 맞춤형 보너스 문제가 있는데, 그 문제들은 주말에 공개되기 때문에 공식적인 마지막 날은 17일이다.

비록 2주라는 짧은 기간이었지만, 매일 문제를 풀고 TIL을 작성하는 습관을 들일 수 있어서 좋았다!

또, 시니어개발자의 코드와 해설을 통해 문제 접근 방식과 사고 과정을 조금이나마 배울 수 있었던 시간이라 알차게 보낸 것 같다.😊

 

 



오늘은 백준의 실버 문제가 나왔는데, 어느 정도 풀다가 헤매는 부분이 있어 다른 사람들의 코드를 참고하여 풀었다.

 


 

[백준: 29723번] 브실이의 입시전략

public class BOJ_29723 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer nt = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(nt.nextToken());  // 수강한 과목 수
        int M = Integer.parseInt(nt.nextToken());  // 요구 과목 수
        int K = Integer.parseInt(nt.nextToken());  // 공개 과목 수

        // 수강한 과목
        Map<String, Integer> taken = new HashMap<>(N);
        for (int i = 0; i < N; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            String subject = st.nextToken();
            int score = Integer.parseInt(st.nextToken());
            taken.put(subject, score);
        }

        // 공개한 과목
        Set<String> open = new HashSet<>();
        for (int i = 0; i < K; i++) {
            open.add(br.readLine());
        }

        // 공개한 과목 점수 먼저 저장
        int base = 0;
        List<Integer> others = new ArrayList<>();
        for (Map.Entry<String, Integer> e : taken.entrySet()){
            if (open.contains(e.getKey())) {
                base += e.getValue();
            }
            else {
                others.add(e.getValue());
            }
        }

        Collections.sort(others);

        int need = M - K;
        int min = base;
        for (int i = 0; i < need; i++) {
            min += others.get(i);
        }

        int max = base;
        for (int i = 0; i < need; i++) {
            max += others.get(others.size() - 1 - i);
        }

        System.out.println(min + " " + max);

    }
}

/*
<max의 for문 설명>
- i 하는 이유는 뒤에서부터 차례대로 접근하기 위해서

others = [10, 20, 30, 40, 50]   # 오름차순 정렬
        인덱스:    0    1    2    3    4
        값:      10   20   30   40   50

        반대로 읽기 (len(others)-1-i 사용)
        i = 0 → 인덱스 4 → 값 50
        i = 1 → 인덱스 3 → 값 40
        i = 2 → 인덱스 2 → 값 30
        i = 3 → 인덱스 1 → 값 20
        i = 4 → 인덱스 0 → 값 10
*/

 

 

 

'코딩테스트 > [스파르타] 작심큰일 코테 챌린지' 카테고리의 다른 글

[Day 9] TIL  (2) 2025.08.15
[Day 8] TIL  (0) 2025.08.14
[Day 7] TIL  (0) 2025.08.12
[Day 6] TIL  (2) 2025.08.12
[Day 5] TIL  (2) 2025.08.08