알고리즘/코딩테스트-Programmers

[Programmers] 의상 JAVA

kwang2134 2025. 1. 30. 18:12
728x90
반응형
728x90

[Programmers] 의상 - LV 2 


접근

  • 해시

풀이

의상을 조합해 만들 수 있는 모든 경우의 수를 구하는 문제이다. 의상의 카테고리에서 최대 1개의 의상을 입을 수 매일 최소 1개의 의상은 필수로 입어야 한다. 

    public int solution(String[][] clothes) {
        Map<String, Integer> clothesMap = new HashMap<>();

        for (String[] clothe : clothes) {
            clothesMap.merge(clothe[1], 1, Integer::sum);
        }

        int answer = 1;

        for (int count : clothesMap.values()) {
            answer *= (count + 1);  
        }
        
        return answer - 1;
    }

해시맵을 사용해서 간단하게 풀 수 있는 문제이다. 의상의 경우 겹치는 의상은 존재하지 않아 개수로만 표현해도 충분하다. 키 값으로 카테고리를 사용하고 값으론 의상의 개수를 가진다. 모든 조합을 구하기 위해선 의상들의 개수를 곱해주면 되는데 해당 카테고리의 옷을 안 입는 경우도 고려해 + 1 한 값을 곱해주어야 한다. 그리고 마지막에 옷을 하나도 안 입는 경우를 빼주면 모든 조합의 수가 된다. 


전체 코드

import java.util.*;

class Solution {
    public int solution(String[][] clothes) {
        Map<String, Integer> clothesMap = new HashMap<>();

        for (String[] clothe : clothes) {
            clothesMap.merge(clothe[1], 1, Integer::sum);
        }

        int answer = 1;

        for (int count : clothesMap.values()) {
            answer *= (count + 1);  
        }
        
        return answer - 1;
    }
}
728x90