본문 바로가기
백준

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

by MY블로그 2023. 5. 15.
 

14425번: 문자열 집합

첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다.  다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어

www.acmicpc.net

이번 백준 문제는 문자열 집합 이다.

첫번째로 주어진 갯수만큼의 문자열이

두번째로 주어진 문자열에 몇개가 포함되어 있는지에대한 문제이다.

백준 문제 내는 스타일은 아직도 알아듣기가 힘들다..

문제파악하는게 제일 어려운 것 같다.

 

기본적으로 백준 제출용 폼에 코드를 작성한다.

기본 입출력,알고리즘,스트링,맵,단축매크로가 사용된다.

중요한 부분은 맵을 사용하는 부분이며

키는 문자열

값은 bool 형의 참거짓판단으로 사용되는 것!

 

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <map>
#define fastio cin.tie(0)->ios::sync_with_stdio(0); cout.tie(0);
using namespace std;

int N, M, answer; // 제시된 입력변수 N,M과 정답출력용 변수
string S; // 문자열입력받을 변수
map<string, bool> MS; // 문자열+참,거짓으로된bool 형의 Map 객체 MS

int main()
{
    fastio; // 입출력단축 매크로
    cin >> N >> M; // 제시된 입력변수 만큼 반복
    for (int i = 0; i < N; i++) // 처음제시된 N번만큼 반복진행
    {
        cin >> S; // 문자열을 입력받고
        MS[S] = true; // 해단문자열의 map의 값을 true 로 맞춰준다.
        // 문제의 N = 5, 즉 처음입력받은 문자열 5개는 값이 true 이다.
    }
    for (int i = 0; i < M; i++) // 제시된 입력변수 만큼 반복
    {
        cin >> S; // 문자열을 입력받고
        if (MS[S]) // 해당문자열이 true 일경우 (위에서 입력된 문자열과 같다면)
        {
            answer++; // 정답 카운트 증가시킨다.
        }
    }
    // 처음 입력받은 문자열 5개는 true 이고
    // 다음 입력받은 11개의 문자중 위의 5개와 일치하는문자열이 4개 이므로
    // 정답은 4가 출력된다.
    cout << answer << "\n";
    return 0;
}

댓글