<문제>
<Code>
//20551] Sort 마스터 배지훈의 후계자
//Binary Search
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
freopen("input.txt","rt", stdin);
int n, m, tmp, res;
scanf("%d %d", &n, &m);
vector<int> v;
for(int i=0; i<n; i++){
scanf("%d", &tmp);
v.push_back(tmp);
}
sort(v.begin(), v.end());
for(int j=0; j<m; j++){
scanf("%d", &tmp);
//찾아낸 위치의 주소를 리턴하므로 v.begin()(첫번째 원소의 주소)을 빼야함.
res=lower_bound(v.begin(), v.end(), tmp)-v.begin();
if(v[res]==tmp && res!=n){
printf("%d\n",res);
}else{
printf("-1\n");
}
}
/* 시간좀 생각해^^
for(int i=0; i<m; i++){
scanf("%d", &tmp);
auto it=find(v.begin(), v.end(), tmp);
if(it==v.end()){
printf("-1\n");
}else{
printf("%d\n", it-v.begin());
}
}
*/
return 0;
}
<Comment>
처음엔 문제 읽자마자 find()로 찾아서 인덱스번호 출력하면 되는줄 알고 생각없이(?) 호다닥 써서 제출했는데 시간초과
-> Binary Search(이분탐색)을 이용해서 찾아야 함.
- 벡터에 넣어서 정렬해주고
- 이분탐색으로 위치를 찾아야 하는데, "처음으로 등장한 위치"를 찾아야 하므로 lower_bound를 사용.
https://www.acmicpc.net/problem/20551
20551번: Sort 마스터 배지훈의 후계자
지훈이는 Sort 마스터다. 오랫동안 Sort 마스터 자리를 지켜온 지훈이는 이제 마스터 자리를 후계자에게 물려주려고 한다. 수많은 제자들 중에 후계자를 고르기 위해서 지훈이는 제자들에게 문제
www.acmicpc.net
'Problem Solving > 백준' 카테고리의 다른 글
[백준-20363] 당근 키우기 (0) | 2021.08.06 |
---|---|
[백준-20362] 유니대전 퀴즈쇼 (0) | 2021.08.05 |
[백준-21735] 눈덩이 굴리기 (0) | 2021.07.30 |
[백준-21736] 헌내기는 친구가 필요해 (0) | 2021.07.30 |
[백준-21968] 선린의 터를 (0) | 2021.07.25 |