JAVA/Algorithm

[프로그래머스/java] 위장 (HashMap - 가능한 조합의 개수)

nang. 2021. 1. 2. 22:37
반응형
SMALL

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

 

코딩테스트 연습 - 위장

 

programmers.co.kr

 

  • 여러개의 집합에서 원소를 0~1개 뽑아서 만들 수 있는 모든 조합의 개수
    • 문제의 '스파이는 하루 최소 한 개의 의상은 입습니다.' 때문에 모두 안뽑는 경우 1 제외

 

import java.util.*;
import java.util.Map.Entry;

class Solution {
    public int solution(String[][] clothes) {
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        
        // 배열의 종류 별로 원소가 몇개인지 map에 담기
        for(int i = 0; i < clothes.length; i++) {
            String key = clothes[i][1]; // 종류 값
            
            map.put(key, map.getOrDefault(key, 0) + 1); // 해당 종류에 원소 개수 추가
            // getOrDefault : key에 해당하는 value 값이 존재하면 가져와서 추가, 존재하지않으면 0에 추가
        }
        
        int answer = 1;
        
        // Entry : key와 value 쌍들
        for(Entry<String, Integer> entry : map.entrySet()) {
            answer *= entry.getValue() + 1; 
            // 모든 종류에 대해 원소 개수 + 1 을 가져와서 모두 곱해줌 == 가능한 조합의 개수
            // +1 의 이유는 하나의 집합에서 하나도 안뽑는 경우를 추가해주기 위함
        }
        
        return answer - 1; // 아무것도 선택 안하는 경우 1이 조합의 개수에 포함되어있기 때문에 1을 제외해주기
    }
}
반응형
LIST