๐ก ์ด๋ฒ์๋ ์ด์งํ์์ ๊ตฌํ ํ๋ ๋ฒ์ ๋ฐฐ์๋ณด์๋ค.
๋ฌธ์
๐ก ์ด์งํ์ ๊ธฐ๋ฅ์ผ๋ก ์์๋ฅผ ํ์ํ์์ค.
๋น์ฐํ ์๋ ๋ฌธ์ ๊ธฐ์ ๋์ถฉ ๋ด๊ฐ ๋ง๋ค์๋ค.
ํด๋ต
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define MAX_SIZE 100000
int a[MAX_SIZE];
int founded = 0;
int search(int start, int end, int target) {
if (start > end) {
return -9999;
}
int mid = (start + end) / 2;
if (a[mid] == target) {
return mid;
} else if (a[mid] > target) {
return search(start, mid - 1, target);
} else {
return search(mid + 1, end, target);
}
}
int main(void) {
int n, target;
scanf("%d %d", &n, &target);
for(int i = 0 ; i < n ; i++) {
scanf("%d", &a[i]);
}
int result = search(0, n - 1, target);
if(result != -9999) {
printf("%d๋ฒ์งธ ์์์
๋๋ค.\\n", result + 1);
} else {
printf("์์๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.\\n");
}
return 0;
}
์ค๋ช
์์ฐจ ํ์์ด๋?
์ด์ง ํ์(Binary Search)์ ๋ฐฐ์ด ๋ด๋ถ ๋ฐ์ดํฐ๊ฐ ์ด๋ฏธ ์ ๋ ฌ๋์ด์๋ ์ํฉ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
ํ์ ๋ฒ์๋ฅผ ์ ๋ฐ์ฉ ์ขํ๊ฐ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๋ค.
๐(๐๐๐๐)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
search ํจ์
int search(int start, int end, int target) {
if (start > end) { // start๊ฐ end๋ณด๋ค ํด ์๋ ์๊ธฐ ๋๋ฌธ์ ํฐ ๊ฒฝ์ฐ return -9999; ํด์ค๋ค.
return -9999;
}
int mid = (start + end) / 2;
if (a[mid] == target) { // ๋ฐ์ผ๋ก ๋๋ ์ธ๋ฑ์ค ๊ฐ์ด ํ๊ฒ๊ณผ ๊ฐ์ ๋
return mid;
} else if (a[mid] > target) { // ์ฐพ๊ณ ์ํ๋ ๊ฐ์ด ์์๋
return search(start, mid - 1, target);
} else {
return search(mid + 1, end, target);
}
}
- ๋ฐ์ผ๋ก ๋๋ ์ ํ์ํ๊ธฐ ๋๋ฌธ์ int mid = (start + end) / 2; ์์ ์ธ๋ฑ์ค ๊ฐ์ ๋ฐ์ผ๋ก ๋๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
- search(start, mid - 1, target); ์ search(mid + 1, end, target); ์์ mid์ -1๊ณผ +1์ ํด์ฃผ๋ ์ด์
- a[mid] == target ์์ ์ด๋ฏธ ๊ฒ์ฌ๋ฅผ ํ๋ฒ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค์ ๊ฒ์ฌํ ํ์ ์๊ธฐ ๋๋ฌธ์ mid์ -1๊ณผ +1์ ํด์ค๋ค.
๋ง์น๋ฉฐ..
์์ฐจ ํ์๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด์ง ํ์๋ ์ด๋ ต์ง ์๊ฒ ์ดํดํด ๋ณผ ์ ์์๋ค.