Study hard
(c++)프로그래머스 코딩테스트 연습 - 위장 본문
programmers.co.kr/learn/courses/30/lessons/42578
코딩테스트 연습 - 위장
programmers.co.kr
[풀이]
각각 종류마다 옷이 몇 가지씩 있는지 세고, 가능한 경우의 수를 구하는 문제였다.
옷 조합의 수 = (종류1의 옷 개수 + 1(안 입는 경우)) * (종류2의 옷 개수 + 1(안 입는 경우)) * ··· * (종류N의 옷 개수 + 1(안 입는 경우)) - 1(아무것도 안 입는 경우)
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool sortType(vector<string> &A, vector<string> &B) {
return A[1] < B[1];
}
int solution(vector<vector<string>> clothes) {
int answer = 1;
vector<int>c;
int tmp = 0;
//같은 종류끼리 붙도록 정렬
sort(clothes.begin(), clothes.end(), sortType);
//옷 종류마다 몇가지 옷 있는지 저장
for (int i = 0; i < clothes.size(); i++) {
if (i != 0) {
if (clothes[i][1] == clothes[i - 1][1])
tmp++;
else {
c.push_back(tmp);
tmp = 1;
}
}
else
tmp++;
}
c.push_back(tmp);
int N = c.size();//종류 개수
//(종류1의 옷 개수 + 1(안 입는 경우))*(종류2의 옷 개수 + 1(안 입는 경우))*...(종류N의 옷 개수 + 1(안 입는 경우))- 1(아무것도 안 입는 경우)
for (int i = 0; i < N; i++) {
answer *= (c[i] + 1);
}
answer -= 1;
return answer;
}
'프로그래머스 > 해시' 카테고리의 다른 글
(c++)프로그래머스 코딩테스트 연습-베스트앨범 (0) | 2021.03.19 |
---|---|
(c++) 프로그래머스 코딩테스트 연습 - 전화번호 목록 (0) | 2020.10.22 |
(c++)프로그래머스 코딩테스트 연습 - 완주하지 못한 선수 (0) | 2020.10.22 |