안녕 세상아,

[c++/백준] 9375 패션왕 신해빈 본문

백준

[c++/백준] 9375 패션왕 신해빈

돈 많은 백수가 되고싶다 2023. 5. 11. 14:45

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

 

9375번: 패션왕 신해빈

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

www.acmicpc.net

내 기준 어려웠다. 내가 구현에 특히 약한 것 같긴 하다. 사실 약하지 않은 부분 없음

 

예시를 보고 왜 이런 답이 나오는지 수식을 짜기가 어려웠다. 

 

결국 공식은 : (같은 종류 의상의 수 + 1) - 1 이다. 

여기서 -1을 해주는 이유는 알몸일 때를 빼주는 것이다.

 

ex) headgear=3, face=2, pants=1 일 때 공식은

(3 + 1) * (2 + 1) * (1 + 1) - 1 = 23 이다.

  

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

int main() {
	int t;
	cin >> t;

	int n;
	string name, type;
	for (int i = 0; i < t; i++) {
		cin >> n;
		map<string, int> m;
		for (int j = 0; j < n; j++) {
			cin >> name >> type;	//name은 사용하지 않음

			if (m.find(type) == m.end()) {	//type이 없으면 insert 해줌
				m.insert({ type,1 });
			}
			else  //type이 겹치면 해당 type ++
				m[type]++;
		}
		int ans = 1;  //곱해주기 위해 1로 초기화
    
		for (auto x : m) {
			ans *= (x.second + 1);  //정답 구하기 위한 공식
		}
		cout << ans - 1 << '\n';  //알몸일 때 빼주기
	}
	return 0;
}

'백준' 카테고리의 다른 글

[c++/백준] 15654 N과 M (5)  (0) 2023.05.11
[c++/백준] 14425 문자열 집합  (0) 2023.05.11
[c++/백준] 11726 2*n 타일링  (0) 2023.05.10
[c++/백준] 13305 주유소  (0) 2023.05.10
[c++/백준] 15651 N과 M (3)  (1) 2023.05.10