Algorithm/Problem Solve

[백준 1920번] 수 찾기

아네스 2020. 12. 11. 14:18
반응형

이진탐색에서 right범위를 맨처음에 100000주고 했는데 33%쯤에서 계속틀렸다.

N-1으로 수정하니 정답.

아무래도 input수가 적을 때 못찾는걸까? 그래서 memset(arr, 0x7f,sizeof(arr))해서 큰값을 주고 시작했는데도..

안되더라.. ㅠ;

시간은 이진탐색 52ms, map 100ms로 2배차이가 난다.

 

이진탐색으로 한 풀이.

#include <bits/stdc++.h>

using namespace std;

map<int,int> m;
int in_array[100001];
int N,M;

bool binary_search(int target)
{
    int left=0,right=N-1, mid;
    
    while(left <= right)
    {
        mid = (left+right)/2;
        if(in_array[mid] == target) return true;
        else if(in_array[mid] <target)
        {
            left = mid+1;
        }
        else
        {
            right = mid-1;
        }
    }
    return false;
}
int main(void)
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> N ;
    for(int i = 0 ; i<N; i++)
    {
        int temp;
        cin >> temp;
        in_array[i] = temp;
    }
    sort(in_array, in_array+N);
    cin >> M;
    for(int i = 0; i< M; i++)
    {
        int temp;
        cin >> temp;
        if(binary_search(temp))
        {
            cout << 1 << '\n';
        }else{
            cout << 0 << '\n';
        }

    }
}

map써서 바로 푼 풀이

#include <bits/stdc++.h>

using namespace std;

map<int,int> m;
int N,M;

int main(void)
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> N ;
    for(int i = 0 ; i<N; i++)
    {
        int temp;
        cin >> temp;
        m[temp] =0;
    }
    cin >> M;
    for(int i = 0; i< M; i++)
    {
        int temp;
        cin >> temp;
        if(m.find(temp) == m.end())
        {
            cout << 0 << '\n';
        }else{
            cout << 1 << '\n';
        }

    }
}
반응형

'Algorithm > Problem Solve' 카테고리의 다른 글

[백준 1978번] 소수 찾기  (0) 2020.12.11
[백준 1157번] 단어 공부  (0) 2020.12.11
[백준1874번] 스택 수열  (0) 2020.12.11
[백준1260번] BFS와 DFS  (0) 2020.12.09
[백준 1654번] 랜선자르기  (0) 2020.12.08