피너클의 it공부방
백준 9375 패션왕 신해빈 (c++) : 피너클 본문
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
반응형
'백준' 카테고리의 다른 글
백준 16928 뱀과 사다리 게임 (c++) : 피너클 (0) | 2022.06.22 |
---|---|
백준 17626 Four Squares (c++) : 피너클 (0) | 2022.06.21 |
백준 17362 수학은 체육과목 입니다 2 (c++) : 피너클 (0) | 2022.06.21 |
백준 2738 행렬 덧셈 (c++) : 피너클 (0) | 2022.06.20 |
백준 16486 운동장 한 바퀴 (c++) : 피너클 (0) | 2022.06.19 |
Comments