반응형
이 포스트에서는 자료구조 중 하나인 해시맵을 C++에서 활용하여 리스트에 문자열들을 저장하고, 해당 리스트에 어떤 문자열이 존재하는지를 검사하는 기능을 간단하게 구현해보는 내용을 다루고 있습니다.
예시로 풀어볼 문제는 프로그래밍 문제 사이트 백준 Online Judge(BOJ)의 14425번 : '문자열 집합'입니다.
14425번 : 문자열 집합
N개의 문자열로 이루어진 집합을 S라고 할 때, M개의 문자열을 입력받아 그들 중 집합 S에 포함되는 문자열이 몇 개나 존재하는지를 구하는 문제입니다.
집합에 포함된다는 것은 해당 문자열과 완전히 일치하는 문자열을 원소로 가지고 있다는 것을 의미합니다.
이 문제는 대표적인 해시맵 활용 예제로, 해시맵을 활용하여 문제를 해결해보도록 하겠습니다.
#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL), cout.tie(NULL);
int N, M; cin >> N >> M;
map<string, bool> Map;
while(N--) {
string str; cin >> str;
Map[str] = true;
}
int cnt = 0;
while(M--) {
string str; cin >> str;
if(Map[str]) cnt++;
}
cout << cnt;
}
위와 같이 map을 string, bool로 설정하여 문자열을 검색하면 → 문자열의 존재 여부를 리턴해줄 수 있도록 선언해줍니다.
그 다음 N개의 문자열을 받아 집합 S에 해당하는 문자열들에 대해서는 true 값으로 해시맵이 연결되도록 합니다.
그리고 이후 M개의 문자열을 입력받아 Map[str]로 검색하여 true가 반환될 경우 cnt++를 해주어 카운트해줍니다.
위의 해설대로 풀이 코드를 작성하여 제출해보면 양호한 시간에 모든 테스트케이스를 통과함을 확인할 수 있습니다.
반응형
'알고리즘 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
C++ getline EOF 조건문 없이 종료시키는 방법 (BOJ 10820) (0) | 2022.03.21 |
---|---|
[백준/BOJ] 3474번 : 교수가 된 현우, 22864번 : 피로도, 13458번 : 시험 감독 (0) | 2022.03.21 |
C++ cin 초기화, 입력 버퍼 비우는 법 : ignore 함수 (BOJ 4458) (0) | 2022.03.20 |
[백준/BOJ] 1049번 : 기타줄, 9613번 : GCD 합, 21921번 : 블로그 (0) | 2022.03.20 |
[백준/BOJ] 8892번 : 팰린드롬, 9656번 : 돌 게임 2, 1292번 : 쉽게 푸는 문제 (0) | 2022.03.18 |