728x90
https://www.acmicpc.net/problem/9375
문제 풀이
문제에서 의상 종류에 따른 개수가 가장 중요하다.
각 의상종류에 +1 함값을 곱한 뒤에 나온 최종 값에서 -1을 해준 것이 정답이다.
+1은 해당 종류의 의상을 안 입을 경우이고 -1은 모두 안 입을 경우이다.
예를 들어 안경 2, 상의 2, 바지 3이면 (2 + 1)(2 + 1)(3 + 1) - 1 이 정답이라는 것이다.
그렇다면 옷의 이름은 그렇게 중요하지 않다는 의미이고 STL 컨테이너를 이용해서 옷의 종류에 따른 개수를 저장하면 된다!
느낀 점
확실히 수학적인 부분에 약한 모습을 보이는 것 같다. 많이 접해보지 못해서 그런 것일까? 또, 굳이 이 문제에서 맵을 사용했을 필요는 없어 보인다. 다만 코드는 많이 간결해 보인다.
코드
#include <iostream>
#include <string>
#include <map>
using namespace std;
int t, n;
string name, tag;
int main() {
cin >> t;
while (t--) {
map<string, int> m;
cin >> n;
while (n--) {
cin >> name >> tag;
if (m.find(tag) == m.end())
m.insert(make_pair(tag, 1));
else m[tag]++;
}
int ans = 1;
for (auto i : m)
ans *= (i.second + 1);
cout << ans - 1 << "\n";
}
}
'문제 풀이 > 백준(BOJ)' 카테고리의 다른 글
[C++] 백준 10828번 : 스택 (0) | 2021.07.21 |
---|---|
[C++] 백준 1676번 : 팩토리얼 0의 개수 (0) | 2021.07.19 |
[C++] 백준 1010번 : 다리 놓기 (0) | 2021.07.19 |
[C++] 백준 11051번 : 이항 계수 2 (0) | 2021.07.11 |
[C++] 백준 3036번 : 링 (0) | 2021.07.03 |
댓글