오늘 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 |
