문제 | 종류 | 난이도 |
1단계 | Binary Search | 보통 |
2단계 | BFS / DFS 중 하나 출제 | 어려움 |
3단계 | Bayesian Classifier | 지옥불 |
1. 배열의 중앙에 위치한 값을 pivot으로 잡는다. 2. 찾으려는 값과 pivot에 위치한 값을 비교한다. 2-1. 만약 그 값이 일치한다면, 찾은 것이다. 2-2. 만약 그 값이 pivot에 위치한 값보다 작으면 3-1로 이동한다. 2-3. 만약 그 값이 pivot에 위치한 값보다 크면 3-2로 이동한다. 3-1. pivot을 포함해 그 이후의 부분들은 무조건 찾으려는 값보다 크므로 검색 대상에서 제외한다. 3-2. pivot을 포함해 그 이전의 부분들은 무조건 찾으려는 값보다 작으므로 검색 대상에서 제외한다. 4. 만약 더 이상 제외할 수 없다면(최근의 검사 대상이 마지막 검색 대상이었다면) 이 배열에는 찾으려는 값이 없으므로 알고리즘을 종료한다. 5. 남은 부분의 배열에서 중간에 위치한 값을 pivot으로 잡고 2로 이동한다.
int binary_search(int* arr, int tofind, int start, int end) { int pivot = [start와 end의 중간]; /* 주요부분 생략 */ if (end < start) return -1; return binary_search(arr, tofind, start, end); }
#include <stdio.h> #pragma warning(disable:4996) int binary_search(int*, int, int, int); //function prototype int main(void) { int arr1[10] = { 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 }; int arr2[10] = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 }; int arr3[10] = { 5, 5, 5, 10, 10, 10, 10, 15, 15, 15 }; for (int i = 0; i < 10; i++) { printf("%d ", arr1[i]); } printf("\n\n===================\n\n"); for (int i = 0; i < 10; i++) { printf("%d ", arr2[i]); } printf("\n\n===================\n\n"); for (int i = 0; i < 10; i++) { printf("%d ", arr3[i]); } printf("\n\n===================\n\n"); int scan; printf("Input number to find : "); scanf("%d", &scan); printf("Input number found at %d, %d, %d", binary_search(arr1, scan, 0, 9), binary_search(arr2, scan, 0, 9), binary_search(arr3, scan, 0, 9)); return 0; }
[PNG image (35.97 KB)] | [PNG image (6.09 KB)] |
깊이-우선 탐색의 검색 순서 | 이진 트리 |
위 사진은 이진 트리가 아님 | 사진 : http://en.wikipedia.org/ |