아이디어
HashMap을 써서 푸는 문제로 생각했는데, 예시 입력처럼 꼭 Map에 <String, String>을 넣을 필요는 없다.
옷의 이름과 옷의 종류를 입력으로 주는데, 우리가 이름을 쓸 일은 없다. 중요한 것은 옷의 종류가 몇 벌씩 있냐이다.
그래서 Map의 Key에 옷의 종류가 없으면 (옷의 종류, 1)을 저장하게 하고
만약 들어가있다면 (옷의 종류, 기존 개수 + 1)을 저장하게 했다
그렇게 해서 저장된 HashMap에 예를 들어
Headgear가 3개, eyewear가 2개, face가 1개 있다면
해빈이가 옷을 입는 경우의 수는 (3+1) x (2+1) x (1+1)이다.
Headgear가 3개라면 (입지 않는 경우(0), 1번째 옷 입는 경우, 2번째 옷을 입는 경우, 3번째 옷을 입는 경우)의
4가지 경우가 있을 수 있기 때문에 3+1을 해준 것이다.
이렇게 나온 총 경우의 수에 아무 것도 입지 않는 경우의 수인 1을 빼면 우리가 구하는 답이 나온다.
이를 코드로 구현하면 다음과 같다.
import java.io.*;
import java.util.HashMap;
public class N9375 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int testCases = Integer.parseInt(br.readLine());
for (int i = 0; i < testCases; i++) {
int n = Integer.parseInt(br.readLine());
HashMap<String, Integer> clothes = new HashMap<>();
int count = 1;
for (int j = 0; j < n; j++) {
String[] input = br.readLine().split(" ");
if (!clothes.containsKey(input[1])) {
clothes.put(input[1], 1);
} else {
clothes.put(input[1], clothes.get(input[1]) + 1);
}
}
for (String s : clothes.keySet()) {
count *= clothes.get(s) + 1;
}
count--;
bw.write(count + "\n");
}
bw.flush();
bw.close();
br.close();
}
}
아직 초보라 많이 서툴고 틀린 부분이 있을 수 있습니다. 고수분들께서 조언해주실만한 사항이 있으면 감사히 받겠습니다.
'백준 > Silver' 카테고리의 다른 글
| [실버 2] [Java] 백준 1260번: DFS와 BFS (0) | 2025.09.06 |
|---|---|
| [실버 3] [Java] 백준 17626번: Four Squares (0) | 2025.09.05 |
| [실버 4] [Java] 백준 11047번: 동전 0 (0) | 2025.09.02 |
| [실버 3] [Java] 백준 11727번: 2xn 타일링 2 (0) | 2025.08.30 |
| [실버 2] [Java] 백준 1927번: 최소 힙 (1) | 2025.08.29 |