mojo's Blog

위장 본문

프로그래머스/Level 2

위장

_mojo_ 2021. 9. 7. 00:43

문제 링크 => 코딩테스트 연습 - 위장 | 프로그래머스 (programmers.co.kr)

 

코딩테스트 연습 - 위장

 

programmers.co.kr


조합 문제이다.

 

옷 종류 a, b, c, ..., z 가 있다고 가정하자.

 

a 의 갯수를 cntA, b 의 갯수를 cntB, ... ,  z 의 갯수를 cntZ 라고 할 때, 다음과 같은 식을 통해 경우의 수를 구할 수 있다.

 

answer = (cntA + 1) * (cntB + 1) * ... * (cntZ + 1) - 1

 

여기서 + 1 을 하여 곱한 이유는 해당 옷을 입지 않을 수 있으며 마지막에 - 1 을 한 이유는 모든 옷을 입지 않은 경우는 제외해야 하기 때문이다.

 

풀이 Code

 

#include <string>
#include <vector>
#include <map>

using namespace std;

int solution(vector<vector<string>> clothes) {
    int answer = 1;
    
    vector<string> type;
    map<string, int> m;
    
    for(int i=0; i<clothes.size(); i++){
        if(!m[clothes[i][1]]){
            type.push_back(clothes[i][1]);
            m[clothes[i][1]]++;
        }
        else m[clothes[i][1]]++;
    }
    
    for(int i=0; i<type.size(); i++){
        answer *= (m[type[i]] + 1);    
    }
    
    return answer - 1;
}

 

'프로그래머스 > Level 2' 카테고리의 다른 글

오픈채팅방  (0) 2021.09.07
H-Index  (0) 2021.09.07
124 나라의 숫자  (0) 2021.09.07
소수 찾기  (0) 2021.09.06
문자열 압축  (0) 2021.09.05
Comments