[백준/C++] 1920번 수 찾기

2021. 2. 1. 16:19알고리즘/이분 탐색

728x90
반응형

문제: www.acmicpc.net/problem/1920

 

1920번: 수 찾기

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

www.acmicpc.net

 

 

문제풀이

 

이진 탐색 문제이다. 배열을 정렬한 후 이진 탐색을 진행하면 된다.

 

 

코드

#include <iostream>
#include <algorithm>

using namespace std;

int main(){
    ios::sync_with_stdio(false); cin.tie(NULL);

    int N;
    cin>>N;

    int A[N];
    for(int i=0; i<N; i++)
        cin>>A[i];

    sort(A, A+N); //오름차순 정렬

    int M;
    cin>>M;

    int num;
    while(M--){
        cin>>num;

        int start=0;
        int end=N-1;
        bool findNum = false; //탐색 중 수를 찾았는지 여부를 나타내는 논리 변수
        while(start<=end){
            int mid = (start+end)/2;

            if(num == A[mid]){ //수를 찾았으면 1 출력
                cout<<1<<"\n";
                findNum = true;
                break;
            }
            else if(num > A[mid]){
                start=mid+1;
            }
            else{
                end = mid-1;
            }
        }
        if(!findNum) //수를 찾지 못했으면 0 출력
            cout<<0<<"\n";
    }

    return 0;
}

 

 

결과

 

문제를 잘 못 이해서 엄청 고생했습니다.

알고리즘 문제를 풀 땐 짧은 문제라도 정확히 문제를 이해하고 풀이를 시작하는 것이

가장 중요한 것 같습니다...

728x90
반응형