본문 바로가기

PS/BOJ

[C++] BOJ (백준) 1920 : 수 찾기

문제

1920번: 수 찾기 (acmicpc.net)

 

1920번: 수 찾기

첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들

www.acmicpc.net

코드 1
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;
    vector<int> v(n);
    for (int &i : v) cin >> i;
    sort(v.begin(), v.end());

    int m;
    cin >> m;

    while (m--) {
        int tmp;
        cin >> tmp;
        cout << binary_search(v.begin(), v.end(), tmp) << '\n';
    }
    return 0;
}
설명

벡터 v를 정렬하고, std::binary_search(first, last, value) 함수로 주어진 숫자가 벡터에 존재하는지의 여부를 판별한다.

 

코드 2
#include <iostream>
#include <unordered_map>

using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;
    unordered_map<int, bool> mp;

    while (n--) {
        int tmp;
        cin >> tmp;
        mp[tmp] = true;
    }

    int m;
    cin >> m;

    while (m--) {
        int tmp;
        cin >> tmp;
        cout << mp[tmp] << '\n';
    }
    return 0;
}
설명

요소로의 접근이 빠른 unordered_map 자료구조로 각 숫자의 존재여부를 판별한다.