Notice
Recent Posts
Recent Comments
Link
250x250
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

피너클의 it공부방

백준 9375 패션왕 신해빈 (c++) : 피너클 본문

백준

백준 9375 패션왕 신해빈 (c++) : 피너클

피너클 2022. 6. 21. 14:53
728x90
반응형

https://www.acmicpc.net/problem/9375

 

9375번: 패션왕 신해빈

첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로   (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다.

www.acmicpc.net

해쉬를 이용하는 문제다.

int n;
string a, b;
map<string, int> m;
vector<string> v;

n은 입력받을 의상수, a와 b는 의상 이름과 의상 종류, m은 의상 수를 저장할 해쉬, v는 의상 종류를 저장할 벡터다.

int test;
cin >> test;
while (test-- > 0) {
	m.clear();
	v.clear();

테스트케이스를 입력받고 해쉬와 벡터를 초기화한다.

	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> a >> b;
		if (m.count(b)) {
			m[b]++;
		}
		else {
			m[b] = 1;
			v.push_back(b);
		}
	}

n을 입력받고 a와 b를 입력받는다.

만약 m.count(b)가 0이 아니라면 이미 의상종류를 가지고 있는것이지 m[b]++를 해주고 

0이라면 m[b]=1로 해준뒤 v에 의상종류인 b를 넣어준다.

	int ans = 1;
	for (int i = 0; i < v.size(); i++) ans *= (m[v[i]] + 1);
	cout << ans - 1 << endl;

그후 ans에 의상수 + 1 만큼을 곱해준다. +1을 하는 이유는 아예 입지 않은 경우도 넣어야 하기 때문이다.

그후 ans - 1을 출력한다. -1을 하는 이유는 전부 벗은 경우는 피해야 하기 때문이다.

#include <iostream>
#include <string>
#include <map>
#include <vector>

using namespace std;

int n;
string a, b;
map<string, int> m;
vector<string> v;

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	int test;
	cin >> test;
	while (test-- > 0) {
		m.clear();
		v.clear();

		cin >> n;
		for (int i = 0; i < n; i++) {
			cin >> a >> b;
			if (m.count(b)) {
				m[b]++;
			}
			else {
				m[b] = 1;
				v.push_back(b);
			}
		}
		int ans = 1;
		for (int i = 0; i < v.size(); i++) ans *= (m[v[i]] + 1);
		cout << ans - 1 << endl;
	}
}

전체코드다.

728x90
반응형
Comments