소스코드는 Github에서도 확인하실 수 있습니다.
[프로그래머스] 위장 Java
풀이 🚀
얼굴 | 동그란 안경, 검정 선글라스 |
상의 | 파란색 티셔츠 |
위와 같이 의상이 정해져있다고 했을 때, 가짓수는 다음과 같이 계산할 수 있다.
1. 동그란 안경을 쓰냐 안쓰냐
2. 검정 선글라스를 쓰냐 안쓰냐
3. 파란색 티셔츠를 입냐 안입냐
따라서 각각에 대해 안입는 경우의 수를 추가하여 +1을 하고, 마지막에 모두 입지 않는 경우를 -1 해주어 계산할 수 있다.
그 과정에서 나는 HashMap을 사용하였는데, 그 이유는 다음과 같다.
얼굴에 장착할 수 있는 의상이 두 가지가 존재하는데, 이 두가지는 동시에 착용할 수 없다.
따라서 해쉬맵에 {"얼굴": {"동그란 안경", "선글라스"}, "상의": "파란색 티셔츠"} 와 같이 저장한 뒤, 각 key별로 가진 value의 개수를 세어 +1 (입지 않는 경우)하고, 각각을 모두 합하여 마지막에 -1(모두 입지 않는 경우 빼줌)을 해 줌으로서 최종 결과값을 계산할 수 있다.
소스코드
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
class Solution {
public int solution(String[][] clothes) {
int answer = 1;
HashMap<String, List<String>> map = new HashMap<>();
for (String[] c : clothes) {
String key = c[1];
String value = c[0];
if (map.containsKey(key)) {
map.get(key).add(value);
} else {
List<String> emptyList = new ArrayList<>();
emptyList.add(value);
map.put(key, emptyList);
}
}
for (String key : map.keySet()) {
final List<String> values = map.get(key);
answer *= (values.size() + 1);
}
return answer - 1;
}
}