Coding Test/Programmers

[프로그래머스] Lv.2: 의상 - java

찬 주 2023. 8. 11. 08:46

문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

접근법

문제에 힌트가 들어있다. 바로 "조합"이다.

 

입출력 예제 1번을 보면 headgear 2개, eyewear 1개가 있다. 이때 headgear에서 나올 수 있는 경우의 수는 $_2C_0$ 과 $_2C_1$ 이고, eyewear에서 나올 수 있는 경우의 수는 $_1C_1$ 과 $_1C_0$이다. 즉, 각 종류에서 의상은 1개 혹은 0개만 뽑으면 된다는 것이다. 여기서 주의할 점은 최소 한 개의 의상은 입어야 하므로 모두 0개를 뽑는 경우를 빼주면 되는 것이다. 

 

의상의 이름은 필요 없고 개수만 필요하므로 HashMap<String, Integer>를 사용해 의상의 개수를 세주었다.

 

코드

import java.util.*;

class Solution {
    
    HashMap<String, Integer> hashMap = new HashMap<>();
    
    public int solution(String[][] clothes) {
        int answer = 1;
        
        for (int i = 0; i < clothes.length; i++) {
            String key = clothes[i][1];
            hashMap.put(key, hashMap.getOrDefault(key, 0) + 1);
        }
        
        Iterator<String> keys = hashMap.keySet().iterator();
        while (keys.hasNext()) {
            String key = keys.next();
            int value = hashMap.get(key);
            
            answer *= (value + 1);
        }
        
        return answer - 1;
    }
}