문제
https://www.acmicpc.net/problem/9375
풀이
예시 1)
hat headgear
sunglasses eyewear
turban headgear
headgear의 경우의 수: 3 (hat을 쓴다, turban을 쓴다, 안 쓴다)
eyewear의 경우의 수: 2 (sunglasses를 쓴다, 안 쓴다)
3*2 = 6
모두 안쓸 경우 알몸이므로 알몸의 경우의 수를 빼준다.
6-1 = 5
즉 각 (의상 종류 + 1) 모두 곱한 후 -1을 해주면 답을 구할 수 있다.
예시 2)
mask face
sunglasses face
makeup face
face의 경우의 수: 4 (mask를 쓴다, sunglasses를 쓴다, makeup을 한다, 다 안한다)
다 안할 경우 알몸이 되므로 -1을 하면 답은 3이다.
예시 3)
mask face
sunglasses eyewear
makeup headgear
face: 2, eyewear: 2, makeup: 2
다 곱해준 후 -1 = 7
소스코드
package math;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.StringTokenizer;
public class BOJ9375 {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = null;
int T = Integer.parseInt(br.readLine());
for(int i = 0; i < T; i++){
HashMap<String, Integer> map = new HashMap<String, Integer>();
int N = Integer.parseInt(br.readLine());
for(int j = 0; j < N; j++){
st = new StringTokenizer(br.readLine());
st.nextToken();
String key = st.nextToken();
map.put(key, map.getOrDefault(key, 0) +1);
}
int cnt = 1;
for(String key : map.keySet()){
cnt *= (map.get(key) + 1);
}
bw.write((cnt-1) + "\n");
}
bw.flush();
}
}
'💡Problem Solving > BOJ' 카테고리의 다른 글
[BOJ 11286] 절댓값 힙 (Java) (0) | 2021.11.12 |
---|---|
[BOJ 1927] 최소 힙 (Java) (0) | 2021.11.12 |
[BOJ 3036] 링 (Java) (0) | 2021.11.11 |
[BOJ 1037] 약수 (Java) (0) | 2021.11.11 |
[BOJ 13305] 주유소 (Java) (0) | 2021.11.11 |