새소식

코딩테스트/백준_실버

[C++][백준 10816] 숫자 카드 2

  • -

[문제]

https://www.acmicpc.net/problem/10816

 

10816번: 숫자 카드 2

첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,

www.acmicpc.net

[문제 풀이]

sort와 lower bound upper bound 를 이용해서 C++ 에서는 쉽게 구현이 가능하다.

 

lower bound나 upper bound를 쓰기 위해서 sort를 해주자.(9)

구하는 값은 현재 숫자를 넘어서는 수 - 현재 숫자가 처음 나온 위치이기도 하므로 upper bound - lower bound로 구하자.(11)

[코드]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include<iostream>
#include<vector>
#include<algorithm>
#define endl "\n"
 
using namespace std;
 
void solve(vector<int>& sangCard, vector<int>& requestCard){
    sort(sangCard.begin(),sangCard.end());
    for(int i = 0;i<requestCard.size();i++){
        cout<<upper_bound(sangCard.begin(),sangCard.end(),requestCard[i]) - lower_bound(sangCard.begin(),sangCard.end(),requestCard[i])<<" ";
    }
    cout<<endl;
}
 
int main(){
    int n;
    cin>>n;
    vector<int> sangCard(n);
    for(int i = 0;i<n;i++){
        cin>>sangCard[i];
    }
 
    int m;
    cin>>m;
    vector<int> requestCard(m);
    for(int i = 0;i<m;i++){
        cin>>requestCard[i];
    }
    solve(sangCard,requestCard);
    return 0;
}
cs

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.