코딩/코딩테스트
백준 9375번: 패션왕 신해빈
yesman9
2024. 4. 22. 17:23
1. 각 파트별 의상 개수를 카운트 한다.
2. 각 파트에서 선택할 수 있는 옵션은 해당 파트의 의상 수 + 1(선택하지 않은 경우)
3. 2번의 옵션들을 곱한다.
4. 아무것도 선택하지 않은 경우(알몸)가 포함되어있으므로 마지막에 경우의 수에서 1을 뺀다.
정답 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.StringTokenizer;
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 clothes = Integer.parseInt(br.readLine());
HashMap<String, Integer> map = new HashMap<String, Integer>();
for (int j = 0; j < clothes; j++) {
StringTokenizer st = new StringTokenizer(br.readLine());
String name = st.nextToken(); // 의상 이름
String part = st.nextToken(); // 의상 종류
// 의상 종류별로 입력된 개수 cnt
int cnt = map.getOrDefault(part, 0);
map.put(part, ++cnt);
}
int cnt = 1;
for (Entry<String, Integer> set : map.entrySet()) {
cnt = (set.getValue() + 1) * cnt; // 의상 종류 + 1 (해당 파트에 아무것도 안입은 경우)
}
cnt -= 1; // 알몸인 경우 제외
bw.write(String.valueOf(cnt) + "\n");
}
bw.flush();
bw.close();
}
}