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;
}