| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 플로이드 와샬
- lazy propagation
- 2023
- dropout
- 분할 정복
- 이분 탐색
- back propagation
- dfs
- 너비 우선 탐색
- 미래는_현재와_과거로
- pytorch
- DP
- 알고리즘
- 조합론
- 가끔은 말로
- 크루스칼
- BFS
- object detection
- tensorflow
- 세그먼트 트리
- 문자열
- Overfitting
- c++
- 가끔은_말로
- NEXT
- 자바스크립트
- 회고록
- 백트래킹
- 우선 순위 큐
- 다익스트라
Archives
- Today
- Total
Doby's Lab
백준 1920번: 수 찾기 (Python, C++) 본문
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
Level: Silver IV
Solved By: Binary Search
기존 이분 탐색에 대한 감을 잃지 않기 위해 풀어본 문제였습니다.
이분 탐색을 위해서는 탐색을 진행하는 배열에 대해 정렬이 되어 있어야 하며,
현재 mid index에 해당하는 value가 찾고 있는 find value보다 작거나 큰 경우에 어떻게 처리를 하는가가 이분 탐색의 핵심입니다.
아래의 코드와 같이 high를 mid-1로 잡아서 탐색 영역을 반으로 줄이거나 low를 mid+1로 잡아서 탐색 영역을 반으로 줄여가며, 탐색할 수 있습니다.
Python
N = int(input())
n = list(map(int, input().split()))
M = int(input())
m = list(map(int, input().split()))
n.sort()
for find_value in m:
low = 0
high = len(n)-1
flag = False
while low <= high:
mid = int((low+high)>>1)
if find_value < n[mid]:
high = mid - 1
elif find_value > n[mid]:
low = mid + 1
else:
flag = True
break
print((1 if flag == True else 0))
C++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int N, M;
vector<int> n, m;
int main(){
cin >> N;
for(int i = 0; i < N; i++){
int a; cin >> a;
n.push_back(a);
}
cin >> M;
for(int i = 0; i < M; i++){
int a; cin >> a;
m.push_back(a);
}
sort(n.begin(), n.end());
for(auto find_value:m){
int low = 0, high = n.size()-1;
bool flag = false;
while(low <= high){
int mid = (low+high) >> 1;
if(find_value < n[mid]){
high = mid - 1;
}
else if(find_value > n[mid]){
low = mid + 1;
}
else{
flag = true;
break;
}
}
cout << flag << '\n';
}
return 0;
}
'PS > BOJ' 카테고리의 다른 글
| 백준 1158번: 요세푸스 문제 (Python) (0) | 2023.10.24 |
|---|---|
| 백준 1182번: 부분수열의 합 (Python) (0) | 2023.08.26 |
| 백준 1181번: 단어 정렬 (Python, C++) (0) | 2023.07.30 |
| 백준 1874번: 스택 수열 (Python) (0) | 2023.07.30 |
| 백준 1021번: 회전하는 큐 (Python) (0) | 2023.07.30 |