위와 같은 경우엔 headgear : hat, turban & eyewear : sunglasses 로 2개 ,1개에 대한 조합이다.
하지만 하나만 착용하는 경우가 있기 때문에 +1을 더해주고 둘 다 안 입는 경우는 제외하기 위해 -1 을 해준다.
즉, 3 X 2 - 1 을 구하면 되는 것이다.
이러한 풀이를 위해 종류를 Key 로 잡고 수를 카운트 하는 방식을 사용했다.
HashMap 과 getOrDefault() 를 사용했다.
getOrDefault 는 특정 Key에 대한 값이 존재하면 그 값을 반환하고 아닌 경우엔 defaultValue 값을 넣어준다.
풀이는 아래와 같다.
소스 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
import java.util.HashMap;
public class Main {
public static void main(String[] args) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
HashMap<String, Integer> map;
int T = Integer.parseInt(br.readLine());
while(T-- >0)
{
int N = Integer.parseInt(br.readLine());
map = new HashMap<>();
while(N-- >0)
{
st = new StringTokenizer(br.readLine(), " ");
st.nextToken();
String C = st.nextToken();
// getOrDefault = 값이 없으면 defaultValue(0) 를 반환
map.put(C, map.getOrDefault(C, 0)+1);
}
int res = 1;
// 종류 별로 안 입는 경우까지 포함해서 +1
for(int K : map.values())
{
res *= (K+1);
}
// 둘 다 안 입는 경우는 제외해야 하기 때문에 -1
sb.append(res-1 + "\n");
}
System.out.println(sb);
}
}