[BOJ] 집합과 맵 1

Wonjun·2022년 8월 5일
0

BOJ

목록 보기
6/16
post-thumbnail

📝10815번: 숫자카드

문제 설명

숫자카드

해결 방법

이중 for문으로 했더니 시간초과가 나서 binary_search(이진탐색)을 활용했다.
N개의 입력들을 v1 벡터에 넣고, M개의 입력들을 v2 벡터에 넣는다.
v1 벡터를 오름차순 정렬하고, binary_search(v1.begin(), v1.end(), v2[i])를 해서 v2에 있는 원소들을 이진 탐색하여 출력한다.
binary_search는 찾으면 1을 반환하고, 없으면 0을 반환한다.

💻소스코드

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int N, num1, M, num2;
    vector<int> v1, v2;
    cin >> N;
    for (int i = 0; i < N; i++) {
        cin >> num1;
        v1.push_back(num1);
    }
    cin >> M;
    for (int i = 0; i < M; i++) {
        cin >> num2;
        v2.push_back(num2);
    }   // 입력
    sort(v1.begin(), v1.end());
    for (int i = 0; i < M; i++) {
        cout << binary_search(v1.begin(), v1.end(), v2[i]) << " ";
    }   // 출력
    return 0;
}

📝14425번: 문자열 집합

문제 설명

문자열 집합

해결 방법

N개의 문자열을 입력받아 unordered_set에 insert한다.
M개의 문자열을 입력받아 find 함수를 사용하여 해당 문자열이 있다면 카운트해서 출력한다.

💻소스코드

#include <iostream>
#include <unordered_set>
#include <string>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int N, M;
    cin >> N >> M;
    int cnt = 0;
    string str;
    unordered_set<string> s;
    for (int i = 0; i < N; i++) {
        cin >> str;
        s.insert(str);
    }
    for (int i = 0; i < M; i++) {
        cin >> str;
        if (s.find(str) != s.end())
            cnt++;
    }
    cout << cnt << "\n";
    return 0;
}

📝1620번: 나는야 포켓몬 마스터 이다솜

문제 설명

나는야 포켓몬 마스터 이다솜

해결 방법

숫자가 입력되면 포켓몬 이름이 출력되어야 하고, 포켓몬 이름이 입력되면 숫자가 출력되어야 한다. 그래서 <int, string>, <string, int> 두 개의 map을 선언했다. 입력으로 포켓몬과 숫자를 map에 insert하고, input이 숫자 문자열인지 알파벳인지 검사해서 알맞은 출력을 하도록 했다.

💻소스코드

#include <iostream>
#include <map>
#include <string>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int N, M;
    string poket, input;
    map<int, string> poket_num;
    map<string, int> poket_name;
    cin >> N >> M;
    for (int i = 0; i < N; i++) {   // 도감 두개를 만듬.
        cin >> poket;
        poket_num.insert({i + 1, poket});   // {숫자, 포켓몬}
        poket_name.insert({poket, i + 1});  // {포켓몬, 숫자}
    }
    for (int i = 0; i < M; i++) {
        cin >> input;
        if ('0' <= input[0] && input[0] <= '9')
            cout << poket_num[stoi(input)] << "\n";   // 숫자 입력 시 포켓몬 이름 출력
        else
            cout << poket_name[input] << "\n";  // 포켓몬 이름 입력 시 숫자 출력
    }
    return 0;
}

profile
성장 = 학습 + 적용 + 회고

0개의 댓글