[백준/C++] 14425번: 문자열 집합

-inn·2022년 5월 24일
0

백준

목록 보기
22/28

14425번: 문자열 집합 문제 바로가기

문제


문제 풀이 과정

N개의 문자열 [n_str] 과 M개의 문자열[m_str]이 주어질 때,
m_str 중에 n_str과 같은 문자열의 개수를 출력하는 문제

➡️ set 을 사용하면 쉽게 풀 수 있겠다 !

# 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() 와 같은 반복자를 반환합니다.
  1. 집합 S에 해당하는 문자열을 가진 set n을 선언하여 n_str 입력

  2. 집합 S에 포함되는지 확인할 문자열 m_str 입력 받고,

    해당 문자열이 S에 포함되는지 확인

    if (n.find(m_str) != n.end()) {  // 해당 원소가 없다면 n.end() 반환하기 때문
    	ans++;
    }
  3. 포함될 때마다 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;
}

참고 사이트
https://blockdmask.tistory.com/79

profile
☁️

0개의 댓글