티스토리 뷰

알고리즘

[프로그래머스] 위장

DevBee 2021. 3. 31. 23:48

programmers.co.kr/learn/courses/30/lessons/42578

 

코딩테스트 연습 - 위장

 

programmers.co.kr

 

문제는 위와 같으며, 먼저 주어진 이차원 배열을 {"의상의 종류": "해당 종류의 의상 수"} 형태의 Map으로 변환합니다. 이후 각 의상의 수 + 1을 최종 답에 곱한 뒤, 마지막으로 -1을 하여 답을 얻을 수 있습니다.

 

import java.util.HashMap;
import java.util.Map;

class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;

        // {종류: 갯수} 형태 맵 생성
        Map<String, Integer> clothesMap = new HashMap<>();

        for (String[] clothe : clothes) {
            // 종류 여부를 판단하여 없는 경우 0 + 1, 있는 경우 기존 갯수 + 1 값을 저장
            clothesMap.put(clothe[1], clothesMap.getOrDefault(clothe[1], 0) + 1);
        }

        // 경우의 수 확인 answer *= (옷의 개수 + 입지 않을 경우)
        for (int cnt : clothesMap.values()) {
            answer *= (cnt + 1);
        }

        // 모든 옷을 입지 않는 경우는 없기 때문에 -1
        return answer - 1;
    }
}

 

경우의 수를 확인할 때 각 종류별로 옷을 하나씩 입는 경우(옷의 개수) + 해당 종류의 옷을 입지 않는 경우(1)를 구하였고, 옷의 종류는 독립적이기 때문에 모든 종류에 대해 경우의 수를 곱해줍니다.

최종적으로 나온 수에서 -1을 하는 이유는 아무 종류의 옷도 입지 않는 경우는 없기 때문에 이 경우를 제외시켜주는 것입니다.

 

Map에 해당 키가 포함되어 있는지 아닌지를 if 문으로 판단하지 않고 getOrDefault 메소드를 사용하여 처리함으로써 Null을 방지할 수 있었습니다. getOrDefault 메소드는 첫번째 파라미터로 주어진 값을 key로 하여 Map에서 값을 구하고 그 key가 존재하지 않는다면 두번째 파라미터 값을 기본 값으로 반환하는 메소드입니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함