Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 트리 순회
- 자바
- flask
- 자바 디자인 패턴
- 백준 12761번
- 하둡
- 백준 사이트
- domain driven develop
- hadoop
- 12761 돌다리
- 12761번 돌다리
- http 개념
- 파이썬
- MongoDB Realm
- 정렬
- 몽고디비 렘
- go
- 우분투
- 도메인 주도 개발 시작하기
- 고 배열
- golang
- 백준 12761
- 백준
- 도메인 주도 개발
- http 완벽가이드
- String 함수
- ddd
- golang struct
- 자바 디자인패턴
- 백준 파이썬
Archives
- Today
- Total
개발바닥
BOJ_18809 [ 수 찾기 ] 본문
반응형
문제
https://www.acmicpc.net/problem/1920
문제 해결 방법
이분탐색을 이용하면 해결할 수 있는 문제이다.
1. stl 함수 사용
c++ 에서 제공하는 binary_search() 함수를 사용하면 해결 (algorithm.h 헤더파일 추가해주세요.)
2.직접 구현을 했을때
문제를 제출 했을 때 시간초과가 계속 나서 원인을 찾아보니
if( arr[mid]<find_num) 이라면
left = mid+1
else if( arr[mid] >find_num) 이라면
right = mid-1
해주어야 되는데 right 값을 변경할 때 -1을 안해주어서 시간초과가 발생했다...
라이브러리 함수를 사용하는 것도 중요하지만 직접 구현해서 내부 로직이 어떤식으로 동작하는 아는 것을 추천드립니다.
소스 코드
https://github.com/jokerKwu/BOJ_Algorithm/blob/master/BinarySearch/boj_1920.cpp
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int N, M;
typedef long long ll;
vector<ll> arr;
int binarySearch(ll findNum) {
int left = 0, right = arr.size()-1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == findNum) {
return 1;
}
else if (arr[mid] > findNum) {
right = mid-1; //-1 하고 안하고 시간초과
}
else {
left = mid + 1;
}
}
return 0;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> N;
for (int i = 0; i < N; i++) {
ll num;
cin >> num;
arr.push_back(num);
}
sort(arr.begin(), arr.end());
cin >> M;
for (int i = 0; i < M; i++) {
ll num;
cin >> num;
cout<<binarySearch(num)<<'\n';
//cout << binary_search(arr.begin(), arr.end(), num)<<'\n'; //라이브러리 함수 사용
}
return 0;
}
반응형
'[ Algorithm ] > [ BOJ ]' 카테고리의 다른 글
BOJ_17069 [ 파이프 옮기기2 ] (0) | 2020.05.07 |
---|---|
BOJ_17828 [ 문자열 화폐 ] (0) | 2020.04.08 |
BOJ_17140 [ 이차원 배열과 연산 ] (0) | 2020.04.08 |
BOJ_2251 [ 물통 ] (0) | 2020.04.08 |
BOJ_18808 [ 스티커 붙이기] (0) | 2020.04.08 |
Comments