99클럽 코테 스터디 10일차 TIL + 회상

sun·2025년 1월 24일
0
post-thumbnail

오늘의 학습 키워드 및 문제

#해시 #HashMap
백준 브론즈1) 회상

문제풀이

노교수님의 수업을 m번 이상 들은 학생의 수를 구하는 것이기에 HashMap을 사용하여 학번을 key, 학번의 개수를 value로 지정하여 문제를 풀어야겠다고 생각했다.

  1. 교수님이 수업한 개수(n)와 몇 번 이상 들은 학생을 세어야 하는지(m) 입력받음
  2. n번 반복문 실행
    2-1. 각 반의 학생 수와 학번을 입력받음
    2-2. 입력받은 학번이 포함되어 있는지 확인하여 HashMap 저장 분기처리
  3. HashMap의 value 반복문 실행
    3-1. value가 m 이상인 학생 수를 세어 출력
import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Map<String, Integer> map = new HashMap<>();
        StringTokenizer st = new StringTokenizer(br.readLine());
        
        // 수업한 개수 입력
        int n = Integer.parseInt(st.nextToken());
        // 분석의뢰 수업 개수 입력
        int m = Integer.parseInt(st.nextToken());
        
        // 각 반의 학생 수와 학번 입력
        for(int i=0; i<n; i++) {
            int student = Integer.parseInt(br.readLine());
            st = new StringTokenizer(br.readLine());
            // 학번의 중복 개수 세기
            for(int j=0; j<student; j++) {
                String s = st.nextToken();
                if(map.containsKey(s)) {
                    map.put(s, map.get(s)+1);
                } else {
                    map.put(s, 1);
                }
            }
        }
        
        // 분석의로 수업 개수 이상 수업을 들은 학생의 수 출력
        int cnt = 0;
        for(Integer i : map.values()) {
            if (i >= m) cnt++;
        }
        System.out.println(cnt);
        br.close();
    }
}

다른방법

1. HashMap 저장 시 분기처리 대신 map.getOrDefault() 사용 (성공)

  • map.getOrDefault(a, b) : 지정된 키(a)가 매핑된 값을 반환하거나, 이 맵에 키에 대한 매핑이 없으면 defaultValue(b)를 반환

공부한 내용정리

  • key에 해당하는 것이 있는지 없는지 확인하고 저장하는 if문을 사용하는 것 보다 getOrDefault()를 사용하면 코드의 길이를 줄일 수 있다.
profile
Please, Steadily

0개의 댓글

관련 채용 정보