[백준] 9375

ninano05·2026년 3월 12일
import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        // testCase
        int testCase = Integer.parseInt(br.readLine());
        for(int i=0;i<testCase;i++) {
            // 의상 개수
            int n = Integer.parseInt(br.readLine());
            bw.write(getEnableDay(n, br)+"\n");
        }
        bw.flush();
        br.close();
        bw.close();
    }
    // 의상 개수와 종류에 따라 옷 입을 수 있는 날짜
    public static Integer getEnableDay(int n, BufferedReader br) throws Exception {
        // 의상의 종류별 개수 파악
        HashMap<String, Integer> map = new HashMap<>();
        for(int i=0;i<n;i++) {
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            st.nextToken();
            String type = st.nextToken();
            map.put(type, map.getOrDefault(type, 0)+1);
        }   
        int answer = 1;
        for(String c : map.keySet()) {
            // 종류별로 하나씩 택해서 입는 경우 & 아예 안 입는 경우(+1)
            answer = answer * (map.get(c)+1);
        }
        // 모든 걸 안 입는 경우 제외
        answer = answer -1;
        return answer;
    }
    
}
  • map.put(type, map.getOrDefault(type, 0)+1) 이 코드는 key가 존재하지 않으면 초기값을 0을 넣고 거기에 +1해서 key의 개수 셀 때 많이 나오는 거임 꼭꼭 잊지 말기
  • 입력처리는 보통 main에서 한다 br 함수에 넘기지 말고 main에서 하려무나
  • Integer getEnableDay 함수 선언 이케 하지 말아 int로 쓰는게 맞다. Integer는 객체임
  • StringTokenizer st = new StringTokenizer(br.readLine(), " "); 반복문 안에 생성자로 계속 만들어도 괜춘 무관하다~~
profile
초보 개발자

0개의 댓글