초기 네이버 기록/알고리즘(C)

[백준 BOJ 10816번] 숫자 카드 2 (C++ )

뜨거운 개발자 2023. 1. 8. 13:10

틀린코드

#include<iostream>
#include<algorithm>


using namespace std;
int find_result(int* arr1,int find_num,int start,int end)
{
        int count = 0;
        int tmp;
        while (start <= end)
        {
                int mid = (start + end)/2;
                if (arr1[mid] == find_num)
                {
                        count++;
                        tmp = mid+1;
                        while (tmp <end &&arr1[tmp] ==find_num)
                        {
                                count++;
                                tmp++;
                        }
                        tmp = mid -1;
                        while (0<= tmp && arr1[tmp] == find_num)
                        {
                                count++;
                                tmp--;
                        }
                        return (count);
                }
                else if (arr1[mid]>find_num)
                        end = mid - 1;
                else
                        start=mid+1;
        }
                return (0);
}

int main()
{
ios ::sync_with_stdio(0);
cin.tie(0);
        int input_num;
        cin >> input_num;
        int arr1[500001];
        for (int i=0; i < input_num; i++)
                cin >>arr1[i];
        sort(arr1, arr1+input_num);
        int n_input_num;
        cin >>n_input_num;
        int find_num;
        int result = 0;
        for (int i = 0; i < n_input_num; i++)
        {
                cin>>find_num;
                result = find_result(arr1,find_num,0,input_num-1);
                cout<<result<<" ";
        }
        cout << "\n";
}

이 문제는 내가 처음으로 2분탐색을 이용해서 문제를 풀어보려했는데 계속해서 오답을 줬다 그래서 나는결국

정답코드

#include <cstdio>
#define MAX 10000000
int A[MAX*2+1];
int main(){
    int N,M,n;
    scanf("%d",&N);
    while(N--){
        scanf("%d",&n);
        A[n+MAX]++;
    }
    scanf("%d",&M);
    while(M--){
        scanf("%d",&n);
        printf("%d ",A[n+MAX]);
    }
}

결국 정답은 위와 같다.

728x90