알고리즘 모음(C++)

백준 9375 - 패션왕 신해빈(C++) 본문

백준

백준 9375 - 패션왕 신해빈(C++)

공대생의 잡다한 사전 2022. 2. 11. 03:11

문제 링크입니다. https://www.acmicpc.net/problem/9375

 

9375번: 패션왕 신해빈

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

www.acmicpc.net

map을 사용해서 푸는 문제입니다.

문제 조건
출력 예시

예시를 통해 확인해보겠습니다.

첫번째 입력에서는 headgear가 hat과 turban으로 2가지가 있으며, eyewear는 sunglasses로 1가지가 있습니다.

이때 1가지 이상만 입으면 됨으로 각각 1개씩 입는 경우인 3가지, (hat, sunglasses) or (turban, sunglasses)로 총 5가지가 있습니다.

 

두번째 입력에서는 face가 mask, sungalsses, makeup으로 3가지가 있습니다.

이때 입을 수 있는 경우는 각각 따로 입는 3가지 입니다.

 

이를 통해서 입을 수 있는 경우의 수를 구하는 공식을 구할 수 있습니다.

N개의 종류가 있을때, K[i]개를 가지고 있다고 하겠습니다.

이때 만들 수 있는 경우는 (K[1] + 1)(K[2] + 1)(K[3] + 1) ..... (K[N] + 1) - 1 입니다

 

 

map을 사용해서 어느 한 종류의 옷이 몇개가 있는지를 확인했습니다.

입력된 옷의 종류가 이미 map에 존재하는 경우에는 해당 값을 하나 증가해주면 되고,

존재하지 않는 경우에는 1의 값으로 생성해주면 됩니다.

		string x, y;
		cin >> x >> y;
		if (cloth.find(y) == cloth.end()) {
			cloth.insert(make_pair(y,1));
		}
		else {
			cloth[y]++;
		}

 

옷의 종류를 모두 저장해줬다면, for문을 통해서 위의 공식을 통해 값을 구해주면 됩니다.

 

 

 

 

자세한 것은 코드를 참고해주세요

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <vector>
#include <cstring>
#include <string>
#include <cmath>
#include <stack>
#include <map>

using namespace std;

int test_case;
int N;

void solve() {
	map<string, int> cloth;
	int ans = 1;
	cin >> N;
	for (int i = 1; i <= N; i++) {
		string x, y;
		cin >> x >> y;
		if (cloth.find(y) == cloth.end()) {
			cloth.insert(make_pair(y,1));
		}
		else {
			cloth[y]++;
		}
	}
	map<string, int> ::iterator calcul;
	for (calcul = cloth.begin(); calcul != cloth.end(); calcul++) {
		ans *= ((calcul->second) + 1);
	}
	ans--;
	cout << ans << "\n";
}

int main()
{
	cin.tie(0);
	cout.tie(0);
	cin >> test_case;
	for (int i = 1; i <= test_case; i++) {
		solve();
	}
	return 0;
}

 

 

질문 및 조언 댓글 남겨주세요