728x90
반응형
1. 문제 요약
- 서로 다른 옷의 조합 구하기
2. 풀이
- 옷의 종류가 string으로 저장되어 있으니 map에 <옷의 종류, 그 갯수>를 저장한다.
- map의 iterator를 통해 저장되어 있는 옷의 개수를 구해올 수 있다.
3. 코드
//틀린 코드
#include <string>
#include <vector>
#include <map>
using namespace std;
int solution(vector<vector<string>> clothes) {
int answer = 0;
map<string, int> m;
for(int i=0; i<clothes.size(); i++){
string str = clothes[i][1];
if (m.find(str) != m.end()){ // 찾으면
m[str]++;
}
else{
m.insert({str,1});
}
answer++;
}
int temp=1;
if (m.size() > 1) {
for (auto iter = m.begin(); iter != m.end(); iter++) {
temp *= iter->second;
}
answer += temp;
return answer;
}
else {
return answer;
}
}
더보기
무조건 종류마다 옷을 입어야 하는 줄 알았는데, 그게 아니었다ㅋㅋㅋ
그냥 뭐든 하나 이상 걸치기만 하면 되는 거였다. 단 한 종류에서는 하나만!
예를 들어, A종류 옷이 3개 B종류 옷이 2개 C종류 옷이 4개 있다면
A종류 옷 중에서는 a1, a2, a3, 입지 않는 경우 이렇게 4가지의 경우가 될 수 있다.
B종류 옷 중에서는 b1,b2,입지 않는 경우
C종류 옷 중에서는 c1,c2,c3,c4,입지 않는 경우
temp = (3+1) * (2+1) * (4+1) 를 구한다.
answer = temp - 1 // 아무 옷도 입지 않은 경우를 빼주면 된다.
#include <string>
#include <vector>
#include <map>
using namespace std;
int solution(vector<vector<string>> clothes) {
int answer = 0;
map<string, int> m;
for(int i=0; i<clothes.size(); i++){
string str = clothes[i][1];
if (m.find(str) != m.end()){ // 찾으면
m[str]++;
}
else{
m.insert({str,1});
}
}
int temp=1;
for (auto iter = m.begin(); iter != m.end(); iter++) {
temp = temp * (iter->second+1);
}
answer = temp-1;
return answer;
}
728x90
반응형
'알고리즘 > 코딩테스트 고득점kit' 카테고리의 다른 글
[해시] 완주하지 못한 선수 (0) | 2022.03.13 |
---|