알고리즘/문제 풀이

9375번: 패션왕 신해빈

Themion 2021. 12. 28. 16:44

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을 뺀 값을 출력하면 정답이 된다.

#include <iostream>
#include <map>
#include <string>

using namespace std;

int test_case() {
    // N: 의상의 수, ret: 의상의 조합
    int N, ret = 1;
    // m[kind]: kind 종류의 의상의 개수
    map<string, int> m;
    // 의상의 이름과 종류
    string name, kind;

    for (cin >> N; N--; ){
        // 의상의 이름과 종류를 입력받은 뒤
        cin >> name >> kind;
        // 입지 않은 것도 한 종류로 계산하여 같은 종류의 의상 수를 업데이트
        m[kind] += (m[kind] == 0) + 1;
    }

    // 각 종류의 의상의 개수를 모두 곱해 조합의 개수를 저장
    for (auto k: m) ret *= k.second;

    // 아무것도 입지 않은 종류는 세지 않으므로 ret - 1을 반환
    return ret - 1;
}

int main() {
    // 입출력 속도 향상
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int T;
    // 테스트 케이스의 수를 입력받고 각 테스트 케이스를 실행
    for (cin >> T; T--; ) cout << test_case() << '\n';
    return 0;
}

'알고리즘 > 문제 풀이' 카테고리의 다른 글

9465번: 스티커  (0) 2021.12.28
9461번: 파도반 수열  (0) 2021.12.28
9322번: 철벽 보안 알고리즘  (0) 2021.12.28
9252번: LCS 2  (0) 2021.12.28
9251번: LCS  (0) 2021.12.28