[프로그래머스][Java] 의상 (Lv.2) - 해시

박현아·2024년 11월 6일
0

programmers-java

목록 보기
27/35

👩‍💻 문제

https://school.programmers.co.kr/learn/courses/30/lessons/42578

🙋‍♀️ 답변

import java.util.*;

class Solution {
    public int solution(String[][] clothes) {
        
        int answer = 0;
        
        HashMap<String, Integer> map = new HashMap<>();
        
        // key 값이 있으면 value 반환, 없으면 0 반환 후 +1
        for (int i=0; i<clothes.length; i++) {
            map.put(clothes[i][1], map.getOrDefault(clothes[i][1], 0)+1);
        }
        
        int sumValue = 1;
        
        // value만 뽑아서 +1을 한 후 곱해준다
        for (Integer value : map.values()) {
            sumValue *= (value + 1);
        }
        
        // 아무것도 고르지 않은 경우의 수 1을 빼준다
        answer = sumValue - 1;
        
        return answer;
    }
}

🤔

처음에는 중복이 불가능한 key값에 옷 이름을 넣고 value에 옷 종류를 넣어야하나? 했는데 key에 옷 종류, value에 옷 개수를 카운트해서 옷 종류별로 옷이 몇 개 있는지 구하려고 했다. 경우의 수를 구할 때 옷 종류별 옷의 개수에 +1 을 더한 후 곱해주고 꼭 한 벌 이상은 입어야한다고 했으니까 마지막에 아무 것도 고르지 않는 경우인 -1을 해주면 되기 때문이다.

예를 들어 예제 1의 경우
headgear 2
eyewear 1 이니까
(2+1) * (1+1) -1 을 해주면 된다. 그래서 총 5가지의 경우.

전에 정리해놓은 HashMap에 대한 포스팅을 조금 참고하여 풀었다.
(HashMap 정리)
(.getOrDefault 정리)

0개의 댓글