오늘은 여기까지

[프로그래머스] 의상 (해시 Lv.2) - 자바 Java 본문

Problem Solving

[프로그래머스] 의상 (해시 Lv.2) - 자바 Java

dev-99 2024. 6. 17. 02:38

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

 

프로그래머스

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

programmers.co.kr

 

개념: 해시

 

문제 설명

  • 종류별 최대 1가지 의상만 착용 가능하다.
  • 하루에 최소 1개의 의상은 입는다.
  • 같은 이름을 가진 의상은 존재하지 않는다.
  • clothes의 각 행은 [의상 이름, 의상 종류]로 이루어졌다.
  • 의상의 개수는 1개 이상, 30개 이하이다.

 

 

문제 풀이

입출력 예 1번

종류 개수
headgear 2
eyewear 1

 

가능한 옷의 조합 개수는 (2+1) * (1+1) - 1 = 5개이다.

옷의 종류마다 아무것도 입지 않는 경우의 수 1을 더한 후 곱한다. 이때 그 어떠한 옷도 입지 않은 경우 1가지를 총 조합의 수에서 빼주면 된다.

 

의상의 종류나 개수가 중요한 것이므로 HashMap<String, Integer>을 선언한다. HashMap의 key는 의상 종류, value는 그 개수가 된다.

 

 

코드 구현

import java.util.HashMap;

class Solution {
    public int solution(String[][] clothes) {
        HashMap<String, Integer> map = new HashMap<>();
        for (String[] item : clothes) {
            String type = item[1];
            map.put(type, map.getOrDefault(type, 0) + 1);
        }
        int answer = 1;
        for (String key : map.keySet()) {
            answer *= (map.get(key) + 1);
        }
        return answer - 1;
    }
}
  • HashMap의 getOrDefault(Object key, Integer defaultValue) 는 key에 매핑된 값이 있으면 해당 값을, 없다면 디폴트로 설정한 값을 리턴해주는 함수이다.