코딩테스트/자바 문제풀이

[CLASS 3: 자료구조] 백준 9375 패션왕 신해빈

승요나라 2024. 10. 27. 23:39

9375번: 패션왕 신해빈

https://www.acmicpc.net/problem/9375

 

# 코드

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));
        StringBuilder sb = new StringBuilder();
        int t = Integer.parseInt(br.readLine());
        for (int i = 0; i < t; i++) {
            int n = Integer.parseInt(br.readLine());
            HashMap<String, Integer> map = new HashMap<>();
            for (int j = 0; j < n; j++) {
                StringTokenizer st = new StringTokenizer(br.readLine(), " ");
                String temp = st.nextToken();
                String clothes = st.nextToken();
                map.put(clothes, map.getOrDefault(clothes, 0) + 1);
            }

            int result = 1;
            for (String key : map.keySet()) {
                int value = map.get(key);

                // 해당 의상 종류를 입지 않은 경우 "1" 까지 포함하여 곱함
                result *= (value + 1);
            }

            // 아무것도 입지 않은 경우 "1" 을 뺀 것이 최종 경우의 수
            sb.append(result - 1).append("\n");
        }
        System.out.print(sb);
        br.close();
    }
}
  • map을 활용해 의상 이름은 버리고 종류와 해당 의상 종류의 개수만 저장한다.
  • 이후 map에서 의상 종류의 개수를 가져와 result에 모두 곱하는데, 이때 해당 의상 종류를 입지 않은 경우까지 포함하여 1을 더하여 곱한다.
  • 최종 경우에 수에서는 아무것도 입지 않은 경우를 한 가지 빼야 한다.
  • HashMap을 사용해 성능도 좋은 기분 좋은 코드였다. ^o^

 

100 ~~