Algorithm/Programmers(c++)

[c++][프로그래머스] 위장

kim-hasa 2021. 8. 13. 18:36

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

 

코딩테스트 연습 - 위장

 

programmers.co.kr

스파이들은 옷을 매일 바꿔입습니다. 내일은 오늘 입은 옷과 다르게 입어야 합니다.

 

의상의 종류 이름을 배열에 넣고 같은 수의 개수만큼 배열에 넣습니다.

 

그 개수들에 +1 한것을 모두 곱합니다.

+1 하는 이유는 n가지 종류라면, n가지를 입는 경우와 입지 않는 경우 1가지가 있기 때문입니다.

 

그리고 마지막에 1을 빼주는데, 모두 안 입는 경우는 없기 때문입니다.

#include <string>
#include <vector>

using namespace std;

int solution(vector<vector<string>> clothes) {
    int answer = 0;
    int len = clothes.size();       // 길이
    vector<string> clothesName;     // 이름을 저장할 배열
    vector<int> clothesCount;       // 종류당 의상의 개수
    int nameCount = 0;    
    
    for(int i=0; i<len; i++)
    {
        clothesName.push_back(clothes[i][1]);    // 종류만 빼서 이름 배열에 넣음
    }
    
    string nothing = "nothing";     // 아무것도 없다는 배열
     
    for(int j=0; j<len; j++)
    {
        string name = clothesName[j];   // 초기 이름을 저장
        if(name != nothing)             // 아무것도 없다는 배열 제외
        {
            for(int k = j; k<len; k++)
            {
                if(clothesName[k] == name)      // 이름이 같다면
                {
                    nameCount++;                // 카운트 증가
                    clothesName[k] = nothing;   // 없다고 만듬
                }
            }
            clothesCount.push_back(nameCount);  // 개수를 저장
            nameCount = 0;
        }
    }
    int sum = 1;
    
    for(int m=0; m<clothesCount.size(); m++)
    {
        sum = sum * (clothesCount[m] + 1);      // 종류 + 아무것도 없을때
    }
    sum -= 1;   // 모두 없는경우는 제외
    
    return sum;
}