Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- D1
- 재귀
- 회전하는큐
- 브루트포스
- 4811
- 서울에서경산까지
- spring boot
- 그리디
- 15353
- 백준
- C++
- BOJ
- BOJ14889
- 크로스핏
- 1로만들기2
- Crossfit
- sw expert academy
- 스택
- 26008
- 동적프로그래밍
- 14863
- DP
- 해시해킹
- Flutter
- Python
- 1781
- dart
- 재귀함수
- 15662
- 삼성
Archives
- Today
- Total
곧죽어도 콛잉
[구현 / BOJ 9375 / C++] 패션왕 신해빈 본문
https://www.acmicpc.net/problem/9375
1) map 자료구조를 활용한다.
2) 해당 옷종류를 카운팅한다.
3) 옷종류를 카운팅한 값 + 1 한 값을 모두 곱해주고, 1을 빼준다.
이 문제의 핵심은 두 가지가 있다.
첫번째로 같은 이름을 가진 의상이 존재하지 않는다고 했으므로 'AAA 모자', 'BBB 모자' 를 입력받는다면, 모자 * 2종류 라고 이해할 수 있다. 즉, map<string, int>로 이해할 수 있다. (모자 : 2)
두번째로 의상을 입을 수 있는 경우의 수를 구하는 방법이다. 예를 들자면, 'AAA 모자, BBB 모자, CCC 안경' 이라고 하자. 그렇다면 입을 수 있는 총 경우의 수는 'AAA 모자 + CCC 안경, BBB 모자 + CCC 안경, CCC안경, AAA 모자, BBB 모자' 이다.
즉 가만히 생각해보면 {AAA 모자, BBB 모자, 모자안씀} * {CCC 안경, 안경안씀} 으로 표현해줄 수 있고, 개수를 구하면 3가지 * 2가지 - 1가지(모자안씀, 안경안씀) = 5가지로 구할 수 있다.
(AAA종류의 개수 + 1) * (BBB종류의 개수 +1) * ...... (ZZZ종류의 개수 +1) - 1 = (의상을 입을 수 있는 총 경우의 수)
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int T, N;
string a, b;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> T;
while(T--){
cin >> N;
map<string, int> closet;
while(N--){
cin >> a >> b;
closet[b]++;
}
ll ans=1;
for(auto i : closet) ans *= ((ll)i.second+1);
cout << ans-1 << '\n';
}
}
'Coding Test > C++' 카테고리의 다른 글
[구현 / BOJ 1213 / C++] 팰린드롬 만들기 (0) | 2023.02.07 |
---|---|
[구현 / BOJ 2559 / C++] 수열 (0) | 2023.02.07 |
[구현 / BOJ 9996 / C++] 한국이 그리울 땐 서버에 접속하자 (0) | 2023.02.04 |
[SW Expert Academy / D1] 2063 중간값 찾기 (0) | 2023.01.05 |
[SW Expert Academy / D1] 2071 평균값 구하기 (0) | 2023.01.05 |
Comments