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> 까먹지 않기!