코딩/코딩테스트

백준 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();
	}
}