https://www.acmicpc.net/problem/9375
[풀이]
프로그래머스의 위장문제와 거의 비슷한 문제였으며 이번에도 HashMap을 이용해서 풀었다. 옷의 종류가 일치하면 value에 +1을 한 후, 옷의 경우의 수를 계산하면 풀 수 있다. 여기서 옷이 모자 2종류, 상의 2종류 일경우 옷을 입는다(모자를 쓴다), 안 입는다(안 쓴다)의 경우를 포함하여 3 * 3을 하면 모든 경우가 도출된다. 이 중, 모자 2종류, 상의 2종류 모두 착용할 수는 없으므로 최종 계산 값에서 -1을 하면 답을 얻을 수 있다.
문제를 풀며 주의할 부분은 HashMap을 사용하는 부분과 경우의 수를 도출하는 부분이었다. 특히 마지막에 -1을 해주는 경우에 주의해야 했다.
[코드]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
Map<String, Integer> map = new HashMap<>();
int test_case = Integer.parseInt(bufferedReader.readLine());
int total = 0;
int temp;
int answer;
while (total < test_case) {
total++;
int clothes_num = Integer.parseInt(bufferedReader.readLine());
map.clear();
answer = 1;
for (int i = 0; i < clothes_num; i++) {
String line = bufferedReader.readLine();
StringTokenizer st = new StringTokenizer(line, " ");
String clothes_name = st.nextToken();
String type = st.nextToken();
if (map.get(type) == null) {
map.put(type, 1);
} else {
map.put(type, map.get(type) + 1);
}
}
for (String keys : map.keySet()) {
temp = map.get(keys);
answer *= (temp + 1);
}
System.out.println(answer - 1);
}
}
}
'Algorithm > 백준' 카테고리의 다른 글
백준 11719번 : 그대로 출력하기 2(Java) (0) | 2021.07.28 |
---|---|
백준 9012번 : 괄호(Java) (0) | 2021.07.28 |
백준 9935번 : 문자열 폭발(Java) (0) | 2021.07.26 |
백준 1157번 : 단어 공부(Java) (0) | 2021.07.25 |
백준 2012번 : 등수 매기기(Java) (0) | 2021.07.23 |