ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [BaekJoon] 10816๋ฒˆ : ์ˆซ์ž์นด๋“œ 2
    SW Test/BaekJoon 2021. 4. 21. 03:53
    ๋ฐ˜์‘ํ˜•
    • ์ด ๊ธ€์€ c++๋กœ ํ’€์ด๋ฅผ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

    ๋ฌธ์ œ

     

    ์˜ˆ์‹œ

     

    ํ’€์ด

    • ์ด๋ถ„ํƒ์ƒ‰์—์„œ ์ฐพ์•„์•ผ ํ•  target ์›์†Œ์˜ ์ธ๋ฑ์Šค ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’๊ณผ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ฐพ์•„ ๋นผ๋Š” ๊ฐ’์ด ๊ฐœ์ˆ˜์ž…๋‹ˆ๋‹ค.
    • ์ง์ ‘ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ—ท๊ฐˆ๋ฆด ์œ„ํ—˜์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— STL ์ค‘ upper_bound์™€ lower_bound ๊ฐ’์„ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    int main(){
        ios::sync_with_stdio(0);
        cin.tie(0);
        long long arr[100000];
        int num;
        cin>>num;
        for(int i=0;i<num;i++){
            cin>>arr[i];
        }
        sort(arr, arr+num);
    
        int n;
        cin>>n;
    
        for(int i=0;i<n;i++){
            int ans;
            cin>>ans;
    
            bool check = false;
            long long s = 0;
            long long e = num-1;
            while(s<=e){
                long long mid = (s+e)/2;
                if(arr[mid] == ans){
                    check = true;
                    break;
                }else if(arr[mid]<ans){
                    s = mid+1;
                }else{
                    e = mid-1;
                }
            }
            cout<<check<<"\n";
        }
    
    }
    • upper_bound์™€ lower_bound๋Š” ๋ฐฐ์—ด์€ ํฌ์ธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , STL์€ iterator๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    #include<iostream>
    #include<algorithm>
    #include<vector>
    using namespace std;
    
    int main(){
        ios::sync_with_stdio(0);
        cin.tie(0);
        vector<int> vec;
        int n;
        cin>>n;
        
        for(int i=0;i<n;i++){
            int num;
            cin>>num;
            vec.push_back(num);
        }
        
        sort(vec.begin(), vec.end());
        
        int m;
        cin>>m;
        
        for(int i=0;i<m;i++){
            int num;
            cin>>num;
            
            vector<int>::iterator left = lower_bound(vec.begin(), vec.end(), num);
            vector<int>::iterator right = upper_bound(vec.begin(), vec.end(), num);
            cout<<right-left<<"\n";
        }
    }

     

    • ์ถ”๊ฐ€๋กœ ๊ถ๊ธˆํ•œ ์ ์ด๋‚˜ ์ˆ˜์ •ํ•  ๋ถ€๋ถ„ ์žˆ์œผ๋ฉด ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š”.

     

     

     

    ๋ฐ˜์‘ํ˜•
Designed by Tistory.