cs/백준
[C++] 백준 1920번: 수 찾기 #ios_base::sync_with_stdio(0);cin.tie(0);
신_이나
2022. 7. 14. 23:21
백준을 풀자! 삼성 D/S 역량 뭐시기 떨어진거 짜증나서 테스트 문제로 나왔던 dfs,bfs 를 부셔보기로 했다.
시작은 이분탐색부터 차근차근해보자!
문제
https://www.acmicpc.net/problem/1920
1920번: 수 찾기
첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들
www.acmicpc.net
#처음 풀었던 풀이
//
// main.cpp
// 백준 1920
//
// Created by 신지원 on 2022/07/14.
//
#include <iostream>
#include <algorithm>
using namespace std;
int main(int argc, const char * argv[]) {
int n, m, nrr[100000];
cin >> n;
for(int i=0;i<n;i++){
cin >> nrr[i]; //배열 촵촵
}
sort(nrr, nrr+n); //정렬해주기
cin >> m;
for(int i=0;i<m;i++){
int target, res;
cin >> target;
int start = 0; int end = n-1;
while(1){
int mid = (start + end)/2;
if(start > end){
res = 0;
break; // 배열 안에 타겟이 없을 때 break;
}
if(nrr[mid] == target){
res = 1;
break; // 배열 안에 타겟이 있어도 break;
}
else if(target < nrr[mid]){
end = mid-1; //mid 보다 타겟이 작으면 끝값을 옮겨서 mid 작게만들기
}
else{
start = mid + 1; //mid 보다 타겟이 크면 시작값을 옮겨서 mid 크게만들기
}
}
cout << res << "\n";
}
return 0;
}
이렇게 썼더니 시간 초과가 났다,, 오잉?!
ios_base::sync_with_stdio(0);cin.tie(0);
더보기
<개념>
ios_base::sync_with_stdio(0);
=> printf scanf 와 cin cout 를 따로 사용하겠습니다.
cin.tie(0);
=> cin 과 cout 를 따로 사용하겠습니다.
분리해주기 때문에 입출력 속도를 빠르게 해준다는 점.
하지만 저 명령어를 쓰는 순간 printf scanf 와 cin cout 를 같이 사용하지 못한다는 점.
속도는 printf scanf > cin cout 가 더 빠르다
이걸 main 함수 앞에 써넣어서 해결 그럼 이걸 항상 써두는게 좋은 걸까? 그렇다고 준서가 말해줬다.
sort 자료형 쓸 때 항상 <algorithm> 까먹지 않기!