μ΅œλŒ€ 1 λΆ„ μ†Œμš”

πŸ“ [Lv2_42578] μœ„μž₯

class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;
        
        Map<String, Integer> map = new HashMap<String,Integer>();
        
        // hashMap에 κ°’λ“€ λ„£κΈ° 
        // key : 의λ₯˜ μ’…λ₯˜ , value : 의λ₯˜ 이름
        for(int i=0; i<clothes.length; i++){
            // 의λ₯˜ μ’…λ₯˜
            String clothesType = clothes[i][1];
            
            // λ§Œμ•½ 의λ₯˜ μ’…λ₯˜κ°€ 이미 있으면
            if(map.containsKey(clothesType)){
                // ν•˜λ‚˜ μΉ΄μš΄νŒ… μΆ”κ°€ν•΄μ£ΌκΈ°
                map.put(clothesType,map.get(clothesType)+1);
            }
            // 의λ₯˜ μ’…λ₯˜κ°€ μ—†μœΌλ©΄ μΆ”κ°€
            else{
            map.put(clothesType,1);
            }
        }
        
       for(int num : map.values()){         
        answer *= (num+1);
        }
        
        // λͺ¨λ‘ μ œμ™Έν•˜λŠ” 경우
        answer -= 1;
        
        return answer;
    }
}

πŸ€” λ‚˜μ˜ 생각

해쉬 ν•¨μˆ˜λ₯Ό μ΄μš©ν•΄ ν‘ΈλŠ” 문젠데 λ¨Όμ € 총 경우의 수λ₯Ό κ΅¬ν•˜λŠ” 곡식을 μ°Ύμ•„λ‚΄μ•Ό ν•œλ‹€.
μ—¬λŸ¬ 경우λ₯Ό κ³ λ €ν•΄ λ³Έ κ²°κ³Ό λ‚΄κ°€ μ•Œμ•„λ‚Έ 것은 λ‹€μŒκ³Ό κ°™λ‹€.
ν•˜λ‚˜μ˜ 옷의 μ’…λ₯˜μ—μ„œ κ³ λ₯Ό 수 μžˆλŠ” κ²½μš°λŠ” (총 μ˜μƒ+1)이닀. κ·Έ μ΄μœ λŠ” κ³ λ₯΄μ§€ μ•ŠλŠ” 경우 λ•Œλ¬Έμ΄λ‹€.
그리고 λ§ˆμ§€λ§‰μ— 아무것도 μ•ˆκ³ λ₯Έ 경우λ₯Ό ν•˜λ‚˜ λΉΌμ€€λ‹€.
총 경우의 μˆ˜λŠ” (총 μ˜μƒ+1)*(총 μ˜μƒ+1)… -1 이닀.
이 과정을 Hash ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ„œ ν’€μ–΄μ£Όλ©΄ λœλ‹€.