알고리즘 문제/Programmers
[프로그래머스] 위장 - Java
Praetoriani
2021. 4. 28. 16:48
문제 : programmers.co.kr/learn/courses/30/lessons/42578
코딩테스트 연습 - 위장
programmers.co.kr
아이디어
주어진 부위의 의류를 입지 않는 것 또한 하나의 선택지로 간주하면 계산이 매우 빠르고 편리해진다.
예를 들어, 주어진 예시 #1의 경우 headgear에 2종류, eyewear에 1종류의 의류가 주어졌는데, 여기에 "선택 안함" 선택지를 추가하면 각각 3종류, 2종류가 된다.
그러면 선택 가능한 총 가짓수는 3 * 2 = 6가지가 되는데, 문제에 주어진 조건에서 최소 한 개의 의상은 입는다고 하였으므로 모두 "선택 안함"을 선택하는 한 종류를 빼주면 결과값으로 5를 얻을 수 있다.
소스코드
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
class Solution {
public int solution(String[][] clothes) {
// key: 의상의 종류
// value: 의상의 갯수
Map<String, Integer> spyClothes = new HashMap<>();
for (String[] cloth : clothes) {
spyClothes.put(cloth[1], spyClothes.getOrDefault(cloth[1], 1) + 1);
}
int answer = 1;
Iterator<Integer> iter = spyClothes.values().iterator();
while (iter.hasNext()) {
answer *= iter.next();
}
return answer - 1;
}
}