[프로그래머스] 의상(Java, 자바)

giggle·2023년 7월 11일
0
post-custom-banner

문제

의상


📌 아이디어

이 문제는 의상의 이름과는 상관없이 종류만을 가지고 조합을 완성하여 문제를 해결할 수 있습니다.
먼저 주어진 의상 종류의 개수만을 고려하는 것이 아닌 의상 종류도 없는 경우도 고려하여 조합을 완성해야 합니다.
예를 들어 [["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]] 라면 headgear는 2가지고 eyewear는 1가지입니다. 하지만 의상 종류가 없는 경우도 고려해야 되기 때문에 headgear 3가지, eyewear 2가지로 조합을 만듭니다. 하지만 의상은 무조건 착용해야되므로 모두 착용되지 않은 한 경우를 빼서 문제를 해결합니다. (3 * 2 - 1)


📌 코드

import java.util.*;

class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;
        Map<String, Integer> map = new HashMap<String, Integer>();
        // HashMap 완성
        for (String[] cloth : clothes) {
            if (!map.containsKey(cloth[1])){
                map.put(cloth[1], 1);    
            } else {
                map.put(cloth[1], map.get(cloth[1])+1);
            }    
        }

        for (Integer value : map.values()){
            answer *= value + 1;
        }

        return answer - 1;
    }
}

보완한 코드

if (!map.containsKey(cloth[1])){
	map.put(cloth[1], 1);    
} else {
	map.put(cloth[1], map.get(cloth[1])+1);
}   
// 보완 코드
map.put(cloth[1], map.getOrDefault(cloth[1], 1) + 1);

✏️ 기존에는 조건문을 사용해서 문제를 해결했지만 getOrDefault를 활용해서 해당 key가 없다면 Default value로 1을 설정하고, 그게 아니라면 기존 값에서 1을 더하도록 했습니다.



피드백 및 개선점은 댓글을 통해 알려주세요😊

profile
배움을 글로 기록하는 개발자가 되겠습니다.
post-custom-banner

1개의 댓글

comment-user-thumbnail
2024년 10월 5일

map.getOrDefault(clothes[i][1], 0) + 1) 여기 디폴트값을 0으로 주는게 맞는것 같습니다

답글 달기