카테고리 없음

[프로그래머스/Java] 의상(Hash 문제) 풀이

iinana 2025. 3. 4. 08:50
728x90

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

앞선 해시 문제들은 대체로 그냥 배열을 사용하고, index를 key화 시키거나 sort를 하는 등의 방식으로 해시를 사용했다면, 이 문제에서는 HashMap을 사용하여 문제를 풀었다. 

clothes 배열 내 원소 각각이 [의상의 이름, 의상의 종류] 로 주어지므로, 해당 원소 내 의상의 종류를 key로 설정하고 value를 해당 의상의 종류 내 의상의 이름 개수, 즉 해당 의상의 종류가 몇 가지 존재하는지로 정했다. 우리가 알고자 하는 것은 몇 가지 의상의 경우의 수가 존재하는 것인지 이므로, 굳이 의상의 이름을 모두 저장할 필요 없이 몇 개의 의상이 해당 의상의 종류에 포함되어 있는지만 저장해 주면 된다.

그리고 마지막으로 hashMap 내 value들에 1을 더한 값을 answer에 곱해주고 1을 빼주면 우리가 원하는 답을 얻을 수 있다. value들에 1을 더해주는 이유는 해당 의상 종류를 입지 않는 경우도 고려해야 하기 때문이고, 마지막 최종값에 1을 빼주는 이유는 아무것도 입지 않는 경우는 고려해서는 안되기 때문이다.

import java.util.HashMap;

class Solution {
    public int solution(String[][] clothes) {
        HashMap<String, Integer> hash = new HashMap<String, Integer>();
        int len = clothes.length;
        for (int i = 0; i < len; i++) {
            if (hash.containsKey(clothes[i][1]))
                hash.replace(clothes[i][1], hash.get(clothes[i][1])+1);
            else hash.put(clothes[i][1], 1);
        }
        
        int answer = 1;
        for (int v : hash.values()) {
            answer *= (v + 1);
        }
        return answer - 1;
    }
}
728x90