Post

[Programmers] 42578번 - 의상 [Java][C++]

[Programmers] 42578번 - 의상 [Java][C++]

문제 링크


1. 문제 풀이


의상의 종류를 key로 해당 종류의 의상의 수를 value로 갖는 해시맵을 활용하면 해결할 수 있다. 해당 종류의 의상의 수가 $N$ 가지일 때 해당 종류의 의상을 입는 경우의 수는 $N$ 가지이며 안 입는 경우 $1$ 가지가 있어 각 종류마다 (해당 종류의 수 $+1$) 가지 경우의 수가 생긴다. 각각의 종류마다 독립 시행이므로 곱 연산이 전체 경우의 수가 되며 의상을 아예 안입는 경우는 없으므로 최종 경우의 수에서 $-1$ 을 해주면 코니가 입을 수 있는 모든 조합의 수를 찾을 수 있다.


2. 코드


1. 풀이 [Java]

HashMap에 저장 후 values 메서드로 값에 대해서만 순회하는 방식으로 해결했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.*;

class Solution {
    public int solution(String[][] clothes) {
        Map<String, Integer> map = new HashMap<>();
        for (String[] c : clothes) {
            map.put(c[1], map.getOrDefault(c[1], 0) + 1);
        }

        int ans = 1;
        for (int v : map.values()) {
            ans *= v + 1;
        }

        return ans - 1;
    }
}


2. 풀이 [C++]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <string>
#include <unordered_map>
#include <vector>

using namespace std;

int solution(vector<vector<string>> clothes) {
    unordered_map<string, int> mp;
    for (auto& c : clothes) mp[c[1]]++;

    int ans = 1;
    for (auto& [k, v] : mp) {
        ans *= v + 1;
    }

    return ans - 1;
}

This post is licensed under CC BY 4.0 by the author.