
✅ 오늘의 학습 키워드
- HashMap과 ArrayList를 활용하여 중복 제거 및 정렬하기
- 정렬한 리스트에서 최솟값과 최댓값 구하기
🔍 오늘의 문제 분석
- 브실이는 N개의 과목을 수강함
- 브실대학은 M개 과목의 점수를 요구
- 브실대학은 M개 과목 중 K개의 과목만 공개함
- 공개한 과목 K개와 공개하지 않은 과목 (M-K) 개 점수의 최솟값과 최댓값을 출력
- 공개된 과목과 비공개된 과목은 브실이가 수강한 과목에 모두 포함
- 과목은 중복되지 않는다
오늘의 문제는 HashMap과 ArrayList를 활용해서 Key와 Value 형식으로 값을 저장하고 정렬을 통해서 최댓값과 최솟값을 계산하는 문제였다.
✨ 오늘의 회고
📌내가 적은 답안📌
더보기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.StringTokenizer;
public class Main {
public static HashMap<String,Integer> getHashMap(String line, HashMap<String, Integer> map) {
StringTokenizer st = new StringTokenizer(line);
map.put(st.nextToken(), Integer.parseInt(st.nextToken()));
return map;
}
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> map = new HashMap<>();
while (n-- > 0) {
String line = br.readLine();
map = getHashMap(line, map);
}
int answer = 0;
for (int i = 0; i < k; i++) {
String line = br.readLine();
answer += map.get(line);
map.remove(line);
}
/*
while (k-- > 0) {
String line = br.readLine();
answer += map.get(line);
map.remove(line);
}*/
ArrayList<Integer> list = new ArrayList<>(map.values());
Collections.sort(list);
int min = answer;
int max = answer;
for (int i = 0; i < m - k; i++) {
min += list.get(i);
}
for (int i = list.size() - 1; i >= list.size() - (m - k); i--) {
max += list.get(i);
}
System.out.println(min + " " + max);
}
}
오늘 문제는 어제 Collections.sort 메서드를 사용해봐서 크게 막히지 않고 풀 수 있었다. 처음 코드를 작성할 때 HashMap 초기화 시 null 대신 새 인스턴스로 초기화해야 한다는 것을 알게 되었다. (NullPointer 에러 발생) 그리고 k 값을 주석 처리된 부분처럼 작성하면 변수 k 값이 0으로 변경되기 때문에 나중에 최소, 최댓값을 계산할 때 오류가 발생했다. 만약에 변수의 값을 변경하지 않고 다시 써야 한다면 for문에서 임시 변수를 선언해서 사용하거나, 원래의 값을 다른 변수에 따로 저장해둬야 한다는 것을 배웠다.
'알고리즘 > [항해99] 1일 1알고리즘 스터디' 카테고리의 다른 글
| 99클럽 코테 스터디 15일차 TIL ✒️학생 인기도 측정 (0) | 2025.04.19 |
|---|---|
| 📑주니어 개발자가 면접을 앞두고 준비한 것들 (0) | 2025.04.17 |
| 99클럽 코테 스터디 13일차 TIL ✒️단어 정렬 (0) | 2025.04.17 |
| 99클럽 코테 스터디 12일차 TIL ✒️임스와 함께하는 미니게임 (0) | 2025.04.16 |
| 99클럽 코테 스터디 11일차 TIL ✒️Repeated DNA Sequences (0) | 2025.04.14 |