[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.