티스토리 뷰

PS

1920 수 찾기

Eastplanet 2021. 1. 9. 17:24
더보기

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector <int> s;
bool binary_search(int sc, int first, int last) {
if (last - first < 2) {
for (int i = first; i <= last; i++) {
if (s[i] == sc)return true;
}
return false;
}
if (sc == s[(first + last) / 2])return true;
else if (sc > s[(first + last) / 2])return binary_search(sc, ((first + last) / 2) + 1, last);
else return binary_search(sc, first, ((first + last) / 2) - 1);
}

int main() {

ios_base::sync_with_stdio(0);

cin.tie(0);

vector <int> find;
int a;
cin >> a;
for (int i = 0; i < a; i++) {
int mem;
cin >> mem;
s.push_back(mem);
}
sort(s.begin(), s.end());
cin >> a;
for (int i = 0; i < a; i++) {
int mem;
cin >> mem;
find.push_back(mem);
}
for (int i = 0; i < a; i++) {
int mem = find[i];
int mem_size = s.size()-1;
if (binary_search(mem, 0, mem_size)){
cout << "1" << "\n";
}
else cout << "0" << "\n";
}

}

선형탐색으로는 시간안에 돌릴수가 없어 이진탐색을 사용해야하는 문제이다.

처음에 이진탐색을 재귀로 작성한후 제출했는데 시간초과가 떳다.

함수 재귀호출 때문에 무거워져서 안돌아가는 줄 알고 반복문으로 돌려보았지만 시간초과였다.

 

ios_base::sync_with_stdio(0);

cin.tie(0); 메인함수 위에 이문장을 추가하고

endl ---> "\n" 이런식으로 바꿔주니

맞았습니다를 받았다.

cin cout endl이 scanf printf \n 보다 느려서 이런 차이가 생긴다고 한다

 

'PS' 카테고리의 다른 글

1654 랜선자르기  (0) 2021.01.12
2609 최대공약수와 최소공배수  (0) 2021.01.09
1181 단어 정렬  (0) 2021.01.09
1018 체스판 다시 칠하기  (0) 2021.01.08
1550 16진수  (0) 2021.01.08
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/01   »
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
글 보관함