C++ ) 2776 암기왕

Blue·2023년 5월 18일
0

접근

하루동안 본 정수들을 수첩 1에 적어두고 M 개의 질문을 한다고 한다.
수첩 1에 적어둔 X 라는 정수를 오늘 본적이 있는가?

결국 찾고자 하는 값이 수첩 1에 있으면 1을 ,없으면 0 을 출력하면 된다.

나는 가장 먼저 N의 범위를 봤다
1<=N <= 1000000 으로 최대값이 100만이다.
그래서 나는 0(N) 의 효율을 내는 알고리즘을 짜도 무방할것 같았다.

처음 수첩 1에 적힌 N개의 수를 Unorder_map 을 사용하여 Cnt를 증가시켜줬고
다음 수첩 2에 적힌 수들을 인덱스접근을 통하여 값이 1 이상이면 1 0 이면 0 을 출력하도록 했다

코드

#include <iostream>
#include <unordered_map>
using namespace std;

int T;
int N,M;
unordered_map<int, int> q;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    
    cin >> T;
    
    for(int i=0;i<T;i++) {
        q.clear();
        cin >> N;
        
        for(int j=0;j<N;j++) {
            int data;
            cin >> data;
            q[data]+=1;
        }
        
        cin >> M;
        
        for(int j=0;j<M;j++) {
            int data;
            cin >> data;
            if(q[data]>=1) {
                cout << 1 << "\n";
            }
            else {
                cout << 0 << "\n";
            }
        }
    }
    return 0;
}
profile
할수있다가 아닌 해야한다!!

0개의 댓글