Coding Test/Programmers
[프로그래머스] Lv.2: 의상 - java
찬 주
2023. 8. 11. 08:46
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42578
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
접근법
문제에 힌트가 들어있다. 바로 "조합"이다.
입출력 예제 1번을 보면 headgear 2개, eyewear 1개가 있다. 이때 headgear에서 나올 수 있는 경우의 수는 $_2C_0$ 과 $_2C_1$ 이고, eyewear에서 나올 수 있는 경우의 수는 $_1C_1$ 과 $_1C_0$이다. 즉, 각 종류에서 의상은 1개 혹은 0개만 뽑으면 된다는 것이다. 여기서 주의할 점은 최소 한 개의 의상은 입어야 하므로 모두 0개를 뽑는 경우를 빼주면 되는 것이다.
의상의 이름은 필요 없고 개수만 필요하므로 HashMap<String, Integer>를 사용해 의상의 개수를 세주었다.
코드
import java.util.*;
class Solution {
HashMap<String, Integer> hashMap = new HashMap<>();
public int solution(String[][] clothes) {
int answer = 1;
for (int i = 0; i < clothes.length; i++) {
String key = clothes[i][1];
hashMap.put(key, hashMap.getOrDefault(key, 0) + 1);
}
Iterator<String> keys = hashMap.keySet().iterator();
while (keys.hasNext()) {
String key = keys.next();
int value = hashMap.get(key);
answer *= (value + 1);
}
return answer - 1;
}
}