백준 9375 패션왕 신해빈

CJB_ny·2023년 1월 1일
0

백준

목록 보기
31/104
post-thumbnail

패션왕 신해빈

#include <iostream>
#include <map>
using namespace std;

typedef long long ll;
#define endl "\n";
int n, m;
string k, v;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	cin >> n;

	for (int i = 0; i < n; ++i)
	{
		map<string, int> mm;
		cin >> m;
		for (int j = 1; j <= m; ++j)
		{
			cin >> k >> v;
			mm[v]++;
		}

		ll ret = 1;
		for (auto c : mm)
		{
			ret *= (ll)(c.second + 1);
		}
		ret--;
		cout << ret << endl;
	}

	return 0;
}

분석 및 후기

경우의 수

일단 1시간안에 못품.. 실딱이 그자체임.

"경우의 수" 제대로 이해못함.

머리에쓰는거 종류 두가지랑

안경 종류 한가지 있을 때 같이 쓸 수 있는 경우의 수는 6가지 이다.

머리에 쓰는거 1, 2쓰는 경우라 안쓰는 경우 (3가지)

안경종류 한가지 쓰는 경우, 안쓰는 경우

그래서 6가지인데 문제에서 알몸인 상태는 없으니까

머리에 아무것도 안쓰는 경우랑 안경 아무것도 안쓰는 경우는 1가지 이니까

6 - 1 하면은 5가지가 나오게 되는 것이다.

ll ret = 1;
		for (auto c : mm)
		{
			ret *= (ll)(c.second + 1);
		}
		ret--;

그래서 이 부분에서 ret에다가 가짓수 만큼 계속 곱해준 다음에 마지막에 전부 아무것도 안쓴 경우를 ret--; 로 빼주는 부분이다.

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글