[programmers/JAVA] 위장

AmeriKano·2023년 3월 16일

문제 설명

문제 링크


접근 방법

의상의 종류를 key로, 의상의 이름을 저장하는 리스트를 value로 가지는 HashMap을 선언한다. 처음 나오는 종류일 경우 빈 리스트를 값으로 추가해주고, 리스트가 존재하면(value가 비어있지 않다면) 리스트에 하나씩 추가해준다. 이렇게 옷들을 전부 추가하면 각 종류별 옷의 개수를 알 수 있는데, 항상 다른 조합으로 입어야 하므로 각각의 종류별 옷의 개수 + 1(안 입는 경우)를 전부 곱하고 마지막에 1을 빼주면(아무것도 입지 않는 경우는 없다고 했으므로) 서로 다른 옷의 조합의 수를 구할 수 있다.

소스 코드

import java.util.*;

class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;
        HashMap<String, ArrayList<String>> hashMap = new HashMap<>();

        for (String[] cloth: clothes) {
            if(!hashMap.containsKey(cloth[1])) {
                hashMap.put(cloth[1],new ArrayList<>());
            }
            hashMap.get(cloth[1]).add(cloth[0]);
        }
        
        for(ArrayList<String> values: hashMap.values()) {
            answer *= values.size()+1;
        }
        return answer - 1;
    }
}

제출 결과


마무리하며

해시맵을 이용하여 경우의 수를 구하는 문제였다. 오늘 공부하며 정리했던 것 중 하나인 분리 연결법을 바로 문제에서 활용하여 해결했는데, 이 문제 이외에도 내가 공부한 것들을 문제 해결에 사용할 수 있다면 보람이 클 것 같다.

profile
똑똑한 사람이 되게 해주세요

0개의 댓글