https://school.programmers.co.kr/learn/courses/30/lessons/42577
문제

풀이
카테고리 (Key), 옷 가지수 (Value)로 map에 저장한다.
map에 저장할 때, key가 등록되어 있는지 .find 함수로 조회하고 수를 갱신한다.
없다면, {Key, 1} 값으로 등록한다.
전체 경우의 수는 (카테고리별 옷 가지수 +1) 을 전부 곱한 값이 된다.
옷을 하나씩 고르고, 해당 카테고리에서 고르지 않는 경우의 수를 하나 더해준 값이다.
문제 조건에서 최소 하나 이상의 의상을 입는다고 하였으므로, 옷을 하나도 입지 않는 경우의 수를 빼줘야한다.
#include <bits/stdc++.h>
using namespace std;
int solution(vector<vector<string>> clothes) {
int ans = 1;
map<string, int> m; // 카테고리별 옷 가지수 저장
for(auto cloth: clothes){
if(m.find(cloth[1])!=m.end()){ // 등록되어 있는 경우, 숫자만 증가
m[cloth[1]]++;
}
else{
m.insert({cloth[1], 1}); // 없는 경우, 새로 넣기
}
}
for(auto i: m){
ans*=(i.second+1); // 옷 가지수 + 선택하지 않는 경우 1
}
ans-=1; // 아무것도 입지 않는 경우 제외
return ans;
}반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
| [PG / C++] 프로그래머스 스티커 모으기 (2) (0) | 2025.03.20 |
|---|---|
| [PG / C++] 프로그래머스 가장 큰 수 (0) | 2025.02.18 |
| [PG / C++] 프로그래머스 등굣길 (0) | 2025.02.15 |
| [PG / C++] 프로그래머스 베스트앨범 (0) | 2025.02.13 |
| [PG / C++] 프로그래머스 전화번호 목록 (0) | 2025.02.11 |