반응형
자료구조 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';
}
}
'Algorithm > Implementation' 카테고리의 다른 글
(Javascript) - 백준(BOJ) 11005번 : 진법 변환 2 (0) | 2020.10.03 |
---|---|
(C++) - 백준(BOJ) 11286번 : 절댓값 힙 답 (0) | 2020.10.03 |
(C++) - 백준(BOJ) 17608번 : 막대기 답 (0) | 2020.09.20 |
(C++) - 백준(BOJ) 5430번 : AC 답 (0) | 2020.09.15 |
(C++) - 백준(BOJ) 1992번 : 쿼드트리 답 (0) | 2020.09.11 |