개발쿠키

[프로그래머스]의상(java) 본문

개발/baekjoon&programmers

[프로그래머스]의상(java)

쿠키와개발 2023. 6. 28. 17:51

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

 

프로그래머스

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

programmers.co.kr


문제 요구사항 요약

주요하게 봐야 할 것은 부위 1개만 입어도 가능하다와 옷을 하나도 입지 않는 경우는 없다라는 사항이며 결과값을 간단히 말하면 옷 종류의 조합 수를 구하면 된다. 입출력 예시를 통해 알아보자

[["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]] 5
[["crow_mask", "face"], ["blue_sunglasses", "face"], ["smoky_makeup", "face"]] 3

첫번째 데이터를 보면 headgear - yellow_hat,green_turban / eyewear - blue_sunglasses 형태이다.

하지만 여기서 우리는 무엇을 입었는지가 아니라 그저 조합의 수만 알면 그만이다.

따라서 headgear  - 2 / eyewear - 1 로 정리를 한 후 각각 안 쓴 경우까지 추가 해주면  headgear  - 3 / eyewear - 2 가 된다

아래 표로 보면 더 이해가 쉽다. 

headgear 아무것도 안입음, yellow_hat, green_turban
eyewear 아무것도 안입음, blue_sunglasses

 

모든 조합이 수는 3*2를 하여 총 6가지가 나오지만 해당 경우에서  headgear와 eyewear를 안쓴 경우 즉 아무것도 입지 않은 경우를 빼 총 5가지가 나온다. 

 

코드를 아래와 같이 구현할 수 있다. 

public int solution(String[][] clothes) {
    int answer = 1;

    HashMap<String, Integer> clothesMap = new HashMap<>();
    
    //옷 종류 별로 분류 후 총 개수 지정 
    //getOrDefault에서 없는 경우 1을 return 이유는 해당 종류를 입지 않은 경우 추가
    for (String[] c : clothes) {
        clothesMap.put(c[1], clothesMap.getOrDefault(c[1], 1) + 1);
    }

	//모든 조합의 수
    for (String k : clothesMap.keySet()) {
        answer *= clothesMap.get(k);
    }

	//모든 종류의 옷을 입지 않은 경우 제외
    return answer - 1;
}