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^
'코딩테스트 > 자바 문제풀이' 카테고리의 다른 글
[CLASS 3: 이분탐색] 백준 2805 나무 자르기 (0) | 2024.11.07 |
---|---|
[CLASS 3: DP] 백준 9461 파도반 수열 (0) | 2024.10.28 |
[CLASS 3: DP] 백준 9095 1, 2, 3 더하기 (0) | 2024.10.26 |
[CLASS 3: BFS] 백준 2606 바이러스 (0) | 2024.10.25 |
[CLASS 3: DP] 백준 2579 계단 오르기 (0) | 2024.10.24 |