알고리즘/프로그래머스 2단계

프로그래머스 - 의상 - C++

게임만드는학생 2024. 7. 30. 14:06

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

#include <string>
#include <vector>
#include <map>
using namespace std;

int solution(vector<vector<string>> clothes) {
    int answer = 1;
    
    map<string,int> m;
    
    for(int i=0;i<clothes.size();i++)
    {
        if(m.find(clothes[i][1])!=m.end())
            m[clothes[i][1]]++;
        else
            m.insert({clothes[i][1],1});
    }
    
    for(auto& item : m)
        answer*=(item.second+1);
    
    return answer-1;
}

 

주어진 clothes를 map에 종류, 이름 으로 저장한다. 

 

어떤 종류든 1종류는 착용하며, 같은 종류는 최대 1개만 착용한다. 

즉, 한 종류에 대해서 (가짓수 + 1) 가지의 경우의 수가 있다. +1은 착용하지 않는 경우이다.

 

A,B두 종류가 있다고 하면 

(A의 수 +1) * (B의 수 + 1) - 1 이 옷을 입는 총 경우의 수이다.

-1 은 전부 착용하지 않는 경우의 수이다.