N개의 문자열 [n_str]
과 M개의 문자열[m_str]
이 주어질 때,
m_str 중에 n_str과 같은 문자열의 개수를 출력하는 문제
# set이란 ?
Red-Black 트리로 만들어진 이진트리의 형태로 이루어져 있다.
특징들은 아래와 같다.
1. 숫자든 문자든 중복을 없앤다.
2. 삽입하는 순서에 상관없이 정렬돼서 입력이 된다.
3. 이진트리의 특성상 삽입과 삭제가 용이하다.
## 사용법
set<int> s;
- 기본 선언 방법
s.insert(k);
- 원소 k를 삽입합니다.
- 삽입시에 자동으로 정렬된 위치에 삽입됩니다.
- 삽입이 성공 실패에 대한 여부는 리턴값 (pair<iterator, bool>) 으로 나오게됩니다.
- pair<iterator, bool>에서 pair.first는 삽입한 원소를 가리키는 반복자 이고,
pair.second는 성공(true), 실패(false)를 나타냅니다.
s.find(k);
- 원소 k를 가리키는 반복자를 반환합니다.
- 원소 k가 없다면 s.end() 와 같은 반복자를 반환합니다.
집합 S에 해당하는 문자열을 가진 set n을 선언하여 n_str 입력
집합 S에 포함되는지 확인할 문자열 m_str 입력 받고,
해당 문자열이 S에 포함되는지 확인
if (n.find(m_str) != n.end()) { // 해당 원소가 없다면 n.end() 반환하기 때문
ans++;
}
포함될 때마다 ans++하여 정답 개수 출력
#include <iostream>
#include <set>
#include <string>
using namespace std;
int N, M, ans;
string n_str, m_str;
set<string> n;
int main() {
cin >> N >> M;
for (int i = 0; i < N; i++) {
cin >> n_str;
n.insert(n_str);
}
for (int i = 0; i < M; i++) {
cin >> m_str;
if (n.find(m_str) != n.end()) {
ans++;
}
}
cout << ans;
return 0;
}