티스토리 뷰
728x90
반응형
수 찾기 문제는 빠른 정렬과 이진 탐색을 활용하는 문제입니다. N이 10만이기 때문에 NlogN의 시간복잡도를 가지는 정렬 알고리즘을 사용해야하며 탐색할 숫자의 개수도 10만이기 때문에 logM의 이진 탐색 알고리즘을 사용해야 합니다.
작성한 코드는 다음과 같습니다.
#include<stdio.h>
int N,M;
int number[100020];
int temp;
void quicksort(int low, int high) {
if (low >= high) return;
int pivot = number[high];
int index = low;
int temp;
for (int i = low;i<high; i++) {
if (number[i] <= pivot) {
temp = number[i];
number[i] = number[index];
number[index] = temp;
index++;
}
}
temp = number[index];
number[index] = number[high];
number[high] = temp;
quicksort(low, index-1);
quicksort(index + 1, high);
}
int binary_search(int num) {
int high = N - 1;
int low = 0;
while (low <= high) {
int mid = (low + high) / 2;
if (number[mid] < num) {
low = mid + 1;
}
else if (number[mid] > num) {
high = mid - 1;
}
else {
return 1;
}
}
return -1;
}
int main(void) {
scanf("%d", &N);
for (int i = 0; i < N; i++) {
scanf("%d", &number[i]);
}
quicksort(0, N - 1);
scanf("%d", &M);
for (int i = 0; i < M; i++) {
scanf("%d", &temp);
if (binary_search(temp) == 1) printf("%d\n", 1);
else printf("0\n");
}
}
문제의 지문은 다음 링크에서 확인할 수 있습니다.
728x90
반응형
'알고리즘 > 문제풀이' 카테고리의 다른 글
[알고리즘/문제풀이/BOJ 1654번] 랜선 자르기 (0) | 2021.07.20 |
---|---|
[알고리즘/문제풀이/BOJ 10816번] 숫자 카드2 (0) | 2021.07.20 |
[알고리즘/문제풀이/BOJ 18111번]마인크래프트 (0) | 2021.07.18 |
[알고리즘/문제풀이/BOJ 1259번] 팰린드롬수 (0) | 2021.07.18 |
[알고리즘/문제풀이/BOJ 2004] 조합 0의 개수 (0) | 2021.07.10 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 애니메이션
- BOJ
- BFS
- 이분법
- 정렬
- 메이플스토리
- 완전탐색
- 큐
- 구현
- gem5
- C언어
- Git
- 재귀함수
- 백준
- 영어 어휘
- Push
- 취미
- 알고리즘
- 건이의 특제 떡국 끓이기
- 영화
- Verilog
- 이진탐색
- backtracking
- C++
- recursive
- 베릴로그
- 너비우선탐색
- 구조체
- 스택
- 백트래킹
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함
반응형
250x250