[JAVA] 의상

NoHae·2025년 1월 10일
0

문제 출처

코딩테스트 연습 > 해시 > 의상
https://school.programmers.co.kr/learn/courses/30/lessons/42578

문제 설명

옷의 종류와 이름이 있는 2차원 배열 clothes가 주어진다. 이 때, 각 종류별로 최대 1가지 의상을 착용할 수 있고, 하루에 최소 한 개의 의상을 입는다.
서로 다른 조합의 수를 return 하라.

접근 방법

옷의 종류 -> Key
종류의 개수 -> value
를 삼는 HashMap을 생성한다. 이를 통해 종류의 개수를 이용하여 조합을 구한다.
(종류의 개수 + 안입는 경우) x (다른 종류의 개수 + 안입는 경우)...
그리고 전체 다 안입은 경우를 빼기 위해 최종 값에 -1을 한다.

import java.util.HashMap;

class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;
        
        HashMap<String,Integer> hm = new HashMap<>();
        
        for(int i = 0; i<clothes.length; i++){
            hm.put(clothes[i][1], hm.getOrDefault(clothes[i][1], 0)+1);
        }
        for(String key : hm.keySet()){
            answer *= hm.get(key)+1;
        }
        return answer-1;
    }
}

알게된 점

처음 이 문제를 접했을 때는 옷의 명칭을 key, 종류를 value로 잡고, value가 겹치면 해당 조합은 count하지 않는 방식으로 접근했다. 하지만 이 방법은 종류의 개수가 3개인 조합일 땐 어려워져 결국 구현 조차 하지 못했다. 그래서 다른 사람이 풀어 놓은 것을 보았다.
문제의 해답으론 key -> 종류, value -> 종류의 갯수로 잡고 푸는 것이다.
앞으로 '조합'의 갯수를 알아내야하는 문제를 풀 땐, key -> 종류, value -> 종류의 갯수로 풀어야겠다.

문제푼 흔적

profile
노력 해보려고 하는 사람(00년생 소프트웨어융합학과, 24년 12월 부터 백엔드 및 코테 공부 시작)

0개의 댓글