각 케이스에 대해서 { 입력받은 경우의 수 + null(선택안함) } 의 갯수를 구한다.
케이스들 끼리 곱한다.
알몸인 경우인 1을 뺀다.
-> 전체 종류에 따라 1개를 고르는 거니까 그냥 갯수끼리 곱해주면 된다.
조합 동작 함수를 안 만들어도 충분히 가능하다!!
종류가 겹치지 않는다고 했으므로 각 키는 고유한 성질이 있는 hashmap을 사용하면 된다.
// entrySet()을 통해 Map.Entry의 Set을 얻음
for (Map.Entry<String, Integer> entry : map.entrySet()) {
String key = entry.getKey(); // 키 얻기
Integer value = entry.getValue(); // 값 얻기
System.out.println("Key: " + key + ", Value: " + value);
}
Hashmap에 입력 값을 모두 넣고 어떻게 같은 걸 추출하지? 싶었는데 처음 들어오는 입력이면 다 넣어주고 거기에다 2번째 이상이면 숫자를 증가시키면 된다.
if(h.containsKey(types)){ h.get(types)+1)h.get(types)+1)`;
👾 테스트 케이스가 여러개일 땐 무조건!! for문 안에서 초기화 시켜주자!
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int test = Integer.parseInt(br.readLine());
for (int t = 0; t < test; t++) {
HashMap<String, Integer> h = new HashMap(); //여기서 초기화 시켜줘야!!
int n = Integer.parseInt(br.readLine());
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
st.nextToken();
String types = st.nextToken();
if (h.containsKey(types)) {
h.put(types, h.get(types) + 1);
} else {
h.put(types, 1);
}
}
int result = 1;
for (int val : h.values()) { //안입는 경우 포함
result *= (val + 1);
}
System.out.println(result - 1);
}
}
}