알고리즘/해시

프로그래머스 - 의상(Java)

연향동큰손 2025. 1. 8. 11:49

 

 

해시를 잘 이용하면 어려운 문제는 아니다.

 

저번에 풀었던 프로그래머스 - 완주하지 못한 선수 문제에서 해시맵의  getOrDefault 메서드를 이용해서 키가 해시맵에 삽입된 횟수를 계산하는 방식이 떠올라서 이번 문제도 이를 이용하여 풀었다.

https://developerwoohyeon.tistory.com/155

 

프로그래머스 - 완주하지 못한 선수(Java)

해시맵 클래스가 제공하는 함수를 적절히 사용해야 해시를 활용하여 풀 수 있었던 문제였다 정렬을 활용하여 검색import java.util.*;class Solution { public String solution(String[] participant, String[] completion) {

developerwoohyeon.tistory.com

 

문제 풀이

 

ex)

[["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]

 

 

우선 옷의 종류를 Key로 하고, 옷의 이름을 Value로 하여 HashMap에 삽입해준다.

삽입하면서 Key에 해당하는 값이 이미 HashMap에 있으면 Value를 1 증가 시켜서 옷의 종류의 갯수를 카운트 해준다.

   int size=clothes.length;
        HashMap<String, Integer> hm = new HashMap<>();
        for(int i=0; i<size; i++){
            hm.put(clothes[i][1],hm.getOrDefault(clothes[i][1],0)+1);
        }

 

 

이러면 HashMap에 다음과 같이 저장 된다.

 

headgear ,  2

eyewear  ,  1

 

 

이제 이 HashMap을 이용하여 모든 조합의 수를 구해야 한다.

 // 모든 조합의 수 계산
        int answer = 1; // 곱셈을 위해 1로 초기화
        for (int count : hm.values()) {
            answer *= (count + 1); // 각 종류에서 입지 않는 경우 포함
        }
        
        return answer - 1; // 아무것도 입지 않는 경우 제외

 

 

<전체 코드>

import java.util.*;
class Solution {
    public int solution(String[][] clothes) {
        int size=clothes.length;
        HashMap<String, Integer> hm = new HashMap<>();
        for(int i=0; i<size; i++){
            hm.put(clothes[i][1],hm.getOrDefault(clothes[i][1],0)+1);
        }
        // 모든 조합의 수 계산
        int answer = 1; // 곱셈을 위해 1로 초기화
        for (int count : hm.values()) {
            answer *= (count + 1); // 각 종류에서 입지 않는 경우 포함
        }
        
        return answer - 1; // 아무것도 입지 않는 경우 제외
    }
}

 

 

 


2025 - 02 - 25 풀이

 

import java.util.*;
class Solution {
    public int solution(String[][] clothes) {
        HashMap<String, Integer> map = new HashMap<>();
        for(String[] row : clothes){
            if(map.containsKey(row[1])){
                int n = map.get(row[1]);
                map.replace(row[1],n+1);
            }else{
                map.put(row[1],1);
            }
            
        }
        
        int answer =1;
     for(int count : map.values()){
         answer = answer * (count+1); //안입는 경우를 추가하기 위해 +1
     }
        
        return answer-1; //둘다 안입는 경우를 빼줘야 함
        
    }
}