끄적끄적 코딩
article thumbnail

옷을 입을 수 있는 경우의 수를 구하는 문제입니다.

같은 부위의 옷은 하나만 입거나 벗을 수 있고, 전부다 벗을 수는 없습니다.

입력받은 부위를 벡터에 저장하고 개수를 입력해주었습니다.
그리고 입력받은 개수를 통해서 부위별 옷의 개수를 세서 경우의 수를 구했습니다.
(x의 개수 + 1) * (y의 개수 + 1) * .... (n의 개수 + 1) - 1
+1은 벗은 경우이며, 마지막 -1은 전부 벗은 경우를 제외한 것입니다.

 

#include <iostream>
#include <cstring>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

int main(int argc, char *argv[])
{
	int ts;
	int n;
	int result;
	int flag;
	string s;
	vector<pair<string, int>> v;

	cin >> ts;

	while (ts--) {
		v.clear();
		flag = 0;
		result = 1;
		cin >> n;
		for (int i = 0; i < n; ++i) {
			cin >> s;
			cin >> s;
			pair<string, int> p;
			for (int i = 0; i < v.size(); ++i) {
				if (v[i].first == s) {
					++v[i].second;
					flag = 1;
					break;
				}
			}
			if (flag == 0) {
				p.first = s;
				p.second = 1;
				v.push_back(p);
			}
			flag = 0;
		}
		for (int i = 0; i < v.size(); ++i) {
			result *= v[i].second + 1;
		}
		result -= 1;

		cout << result << endl;
	}

	return 0;
}

'알고리즘' 카테고리의 다른 글

[C++] 백준 2004번 조합 0의 개수  (0) 2019.09.04
[C++] 백준 1676번 팩토리얼 0의 개수  (0) 2019.09.04
[C++] 백준 11050번 이항 계수 1  (0) 2019.09.03
[C++] 백준 3036번 링  (0) 2019.09.03
[C++] 백준 2981번 검문  (0) 2019.09.03

검색 태그