Algorithm

[백준 BOJ] 9375 패션왕 신해빈 C++

유자바 2024. 8. 1. 19:07

문제


입력

  • 테스트 케이스 개수 T
  • 해빈이가 가진 의상의 수 N
  • N+2번째 줄부터는 의상의 이름과 의상의 종류

출력

  • 해빈이가 입을 수 있는 의상의 경우의 수
    • 같은 종류의 옷은 같이 입을 수 없음

 

풀이


  • 의상의 종류와 의상의 이름이 주어지고 같은 종류는 같이 입을 수 없기 때문에 map을 이용해 저장한다.
  • 이때 map에는 의상의 종류와 해당 종류의 의상의 개수를 map에 저장한다.

세부 풀이

  • 의상의 이름과 의상의 종류(category)를 입력받는다.
  • map에 이미 저장된 category인지 map.find 함수와 map.end() 함수를 이용해 찾는다.
    • 저장되지 않은 category라면 map에 insert해준다.
    • 이미 저장되어 있는 category라면 의상의 개수를 증가시킨다.
  • 입을 수 있는 조합의 경우의 수를 계산해 출력한다.

 

코드

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

int T,N;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    cin >> T;

    while (T--) {
        map <string, int> map;
        string name, category;
        
        cin >> N;
        while (N--) {
            cin >> name >> category;

            if (map.find(category) == map.end()) {
                map.insert({category, 1});
            } else {
                map[category]++;
            }
        }

        int ans = 1;
        for (auto m:map){
            ans *= (m.second+1);
        }
        ans -= 1;
        cout << ans << '\n';
    }

    return 0;
}

 

'Algorithm' 카테고리의 다른 글

백트래킹  (0) 2024.10.01
[프로그래머스 level1] 개인정보 수집 유효기간 C++  (0) 2024.10.01
[백준 BOJ] 1806 부분합 C++  (0) 2024.09.27
[백준 BOJ] 17298 오큰수 C++  (0) 2024.08.01
[백준 BOJ] 2792 보석상자 C++  (0) 2024.07.30