[BOJ/C++] 백준 1920번: 수 찾기

2024. 11. 28. 16:20·🐸 Problem Solving/BOJ

 

🔗 문제 링크 : https://www.acmicpc.net/problem/1920

 

 

☁ `cin.tie(0)`의 필요성을 찾았다..!

 

지금까지 입출력 시간 절약을 위해 `ios_base::sync_with_stdio(0);` 이 한 줄만 사용하고 있었다.

운 좋게도 `cin.tie(0)`까지 쓰지 않아도 통과되는 문제만 만났나 보다..

그리고 내심 `cin.tie(0)`를 꼭! 필요로 하는 시간 제한 문제를 원했는지도 모른다.

 

⏱ 해당 문제 풀이 코드에서 `cin.tie(0)`를 사용하지 않으면 1%에서 시간초과가 뜨는 모습을 볼 수 있다.

 

이제 필수로 사용할 생각에 두근두근..

 

 

 

 


 

문제

N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오.

 

 

 

 

 

입출력 예시

입력

첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수의 범위는 -231 보다 크거나 같고 231보다 작다.

 

 

출력

M개의 줄에 답을 출력한다. 존재하면 1을, 존재하지 않으면 0을 출력한다.

 

 

 

입출력 예시

 

 

 


 

풀이 

이분 탐색(Binary Search)를 이용해 해결하였다.

STL에 있는 `binary_search()`를 사용해도 되지만, 직접 구현하는 방법을 택했다.

⏱ 시간 복잡도 : $\mathbf{O(N\;log\;N + M\;log\;N)}$ = 정렬 + 탐색 

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

vector<int> nums;
int N, M;

int BinarySearch(int n) {
    int st = 0;
    int en = nums.size() - 1;
    
    while (st <= en) {
        int mid = (st + en) / 2;
        if (nums[mid] == n) {
            return 1;
        }
        else if (nums[mid] > n) {
            en = mid - 1;
        }
        else {
            st = mid + 1;
        }
    }
    return 0;
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> N;
    nums.resize(N);
    for (int i = 0; i < N; i++) {
        cin >> nums[i];
    }
    sort(nums.begin(), nums.end());
    cin >> M;
    for (int i = 0; i < M; i++) {
        int n;
        cin >> n;
        cout << BinarySearch(n) << '\n';
    }
    return 0;
}

 

 

 


저작자표시 비영리 변경금지 (새창열림)

'🐸 Problem Solving > BOJ' 카테고리의 다른 글

[BOJ/C++] 백준 7662번: 이중 우선순위 큐  (0) 2024.12.05
[BOJ/C++] 백준 2178번: 미로 탐색  (0) 2024.11.20
[BOJ/C++] 백준 9663번: N-Queen  (0) 2024.11.14
'🐸 Problem Solving/BOJ' 카테고리의 다른 글
  • [BOJ/C++] 백준 11047번: 동전 0
  • [BOJ/C++] 백준 7662번: 이중 우선순위 큐
  • [BOJ/C++] 백준 2178번: 미로 탐색
  • [BOJ/C++] 백준 9663번: N-Queen
Mojing_
Mojing_
매일 매일 경험치를 쌓는 모징이의 개발 블로그입니다 :) This is Mojing’s Dev Blog where she gain experience points every day. :)
  • Mojing_
    모징이의 개발 경험치
    Mojing_
  • 전체
    오늘
    어제
    • 분류 전체보기 (143)
      • 👻 Unity (5)
        • 🔧 기능 구현 (0)
        • 💡 유니티 팁 (0)
        • 📘 Unity 노트 (2)
      • 💻 Programming (14)
        • C (3)
        • C++ (9)
        • C# (0)
        • Swift (2)
      • 💾 Computer Science (16)
        • Algorithm (9)
        • Software Engineering (7)
      • 🐸 Problem Solving (108)
        • Programmers (41)
        • BOJ (67)
      • 🔋 ETC (0)
      • 💡 Quest Log (0)
  • 인기 글

  • 공지사항

  • 태그

    티스토리챌린지
    algorithm
    C++
    Problem Solving
    dynamic programming
    programmers
    프로그래머스
    오블완
    DFS/BFS
    CS
    탐색
    Design Pattern
    BOJ
    backtracking
    sort
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Mojing_
[BOJ/C++] 백준 1920번: 수 찾기
상단으로

티스토리툴바