본문 바로가기

Algorithm/Implementation

(C++) - 백준(BOJ) 9375번 : 패션왕 신해빈 답

반응형

www.acmicpc.net/problem/9375

 

9375번: 패션왕 신해빈

첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로   (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다.

www.acmicpc.net

자료구조 map을 이용해 푸는 문제였습니다.

map은 key,value가 한 쌍으로 이루어진 자료구조입니다. map header를 추가(#include <map>)해주시면 map이라는 자료구조와 내장함수를 사용할 수 있습니다. map변수이름.내장함수명으로 해당 멤버함수를 사용할 수 있습니다.

     

Member 설명
begin() 첫 번째 원소 반복자(iterator)를 반환
end()  마지막 원소 다음의(미 사용 영역) 반복자를 반환. vector와 동작 방식 같음
empty() 저장 하고 있는 요소가 없으면 true 반환. 비어있지 않다면 false반환
clear() 저장하고 있는 모든 원소를 삭제
erase() 특정 위치의 원소나 지정 범위의 원소들을 삭제 
find() key와 연관된 원소의 반복자 반환 
insert() 원소 추가.
lower_bound() 지정한 key의 요소를 가지고 있다면 해당 위치의 반복자를 반환 
[] 연산자 지정한 key 값으로 원소 추가 및 접근.  m[key명] = value값 이런 방식으로도 insert가능
rbegin() map의 오른쪽 끝부터 시작 왼쪽방향(역방향)으로 첫 번째 원소의 반복자를 반환
rend() 역방향으로 마지막 원소 다음의 반복자를 반환 
size()
원소의 개수를 반환
upper_bound()
지정한 key 요소를 가지고 있다면 해당 위치 다음 위치의 반복자 반환

풀이방법 

 1. key:string, value:int 자료형의 map clothes변수 선언.

 2. 옷의 name, type을 입력 받은 후 해당 type을 key로 하여 해당 type의 개수를 저장합니다.

 3. 정답은 map.size()까지의 모든 type의 value를 곱한값이 됩니다.

 

Code

#include <iostream>
#include <string>
#include <cstring>
#include <map>
using namespace std;
int main(){
    int n, clothNum;
    cin >> n;
    while(n--){
        cin >> clothNum;
        map <string,int> clothes;
        string name, type;
        for(int i = 0; i < clothNum; i++){
            cin >> name >> type;
            clothes[type]++;
        }
        int answer = 1;
        for(auto p = clothes.begin(); p!=clothes.end(); p++)
            answer *= p->second + 1;
        cout << answer - 1 <<'\n';
    }
}