문제 내용은 입력으로 의상 이름과 의상 종류를 받은 뒤, 중복되지 않고 입을 수 있는 최대 조합을 찾아줘야 하는데, 주의해야 할 점은, headgear와 eyewear 의상 종류가 이렇게 있을 경우, 한 쪽은 의상을 입지 않아도 되지만, 의상을 아예 입지 않을 수는 없기 때문에 이걸 주의해줘야 한다.
import java.util.HashMap;
import java.util.Map;
public class Clothes {
public static int solution(String[][] clothes) {
HashMap<String, Integer> map = new HashMap<>();
for (int i = 0; i < clothes.length; i++) {
map.merge(clothes[i][1], 1, Integer::sum);
}
int answer = 1;
for (Map.Entry<String, Integer> entry : map.entrySet()) {
answer *= entry.getValue() + 1;
}
return answer - 1;
}
}
문제를 풀어보자면 결국 최대 조합은 의상 종류 별 옷 갯수를 모두 곱해주면 끝인데, Map에 의상 종류를 Key로 하고, Value인 옷 이름은 중요하지 않기 때문에 1로 처리해서 계속 넣어주면 된다.
이후 Map에 의상 종류와 옷 갯수를 모두 넣어주고 나면, Map에 넣은 값을 entrySet()으로 꺼내주면서 곱해야 하는데 의상 종류별로 입지 않는 경우도 있기 때문에, 곱하기 전 의상 종류별로 꼭 + 1을 해서 넣어줘야 하고 답을 Return 하기 전에는 옷을 모두 입지 않는 경우는 없기 때문에 -1을 해서 Return해주면 끝이다.
Leave a Reply