Java - [프로그래머스 Lv.2]42578 - 의상

Paek·2024년 2월 23일
0

코테공부 자바

목록 보기
24/25
post-custom-banner

출처

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

문제


의상이 종류별로 주어지는데, 주어진 의상을 조합하여 입을 수 있는 경우를 구하는 문제이다. 아무것도 안 입어서는 안되고, 같은 종류의 의상은 한번에 하나만 입을 수 있다는 전제 조건이 있다. 조건에 맞게 하나씩 문제를 해결해나가보도록 하겠다.

1. 의상 종류에 따른 갯수를 저장한다.

같은 종류의 의상은 동시에 입을 수 없다. 따라서 이름은 필요하지 않은 정보이고, 종류별 갯수만 세면 된다.

	Map<String, Integer> kind = new HashMap<>();
        for (int i = 0; i < clothes.length; i++) {
            if (kind.containsKey(clothes[i][1])) {
                kind.replace(clothes[i][1], kind.get(clothes[i][1]) + 1);
            } else {
                kind.put(clothes[i][1], 1);
            }
        }

Map을 사용하여 Key에는 의상 종류, value에는 갯수를 저장하였다.

2. 조합 개수 구하기

종류와 갯수를 구하면, 총 경우의 수를 구하면 되는데, 아래 공식으로 간단하게 구할 수 있다.

  • Answer = (의상 종류별 갯수 + 1) ... (의상 종류별 갯수 + 1) - 1

+1을 해주는 이유는, 각각 하나의 의상만 착용했을 경우를 계산해주기 위함이고, 마지막에 -1을 해주는 이유는 아무것도 입지 않는 경우는 존재하면 안되기 때문이다.

코드

import java.util.*;
class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;
        Map<String, Integer> kind = new HashMap<>();
        for (int i = 0; i < clothes.length; i++) {
            if (kind.containsKey(clothes[i][1])) {
                kind.replace(clothes[i][1], kind.get(clothes[i][1]) + 1);
            } else {
                kind.put(clothes[i][1], 1);
            }
        }
        for (String key : kind.keySet()) {
            answer *= kind.get(key) + 1;
        }
        
        return answer - 1;
    }
}
profile
티스토리로 이전했습니다. https://100cblog.tistory.com/
post-custom-banner

0개의 댓글