※문제 PDF는 다음 링크에 들어가면 다운받을 수 있다.
https://kojammin.tistory.com/95
#문제 핵심 힌트 :
힌트1 _ 위의 힌트를 봤을 때, 'N'을 입력 시, mid의 범위를 포함하고, 'Y'를 입력시 mid의 범위를 포함하지 않는다.
- 일반적인 이분 탐색 범위 나눌 때,
A[mid] 와 Key와 비교 후, => Start - mid -1 (왼쪽 구간)|| mid + 1 - End(오른쪽구간)
즉, mid를 포함하지 않고, 왼쪽 오른쪽 구간을 나눈다.
- 이 문제의 이분탐색 범위 나눌 때,
A[mid] 와 Key와 비교 후, => Start - mid (왼쪽 구간, 'N'입력 시)|| mid + 1 - End(오른쪽구간,'Y'입력 시)
즉, mid를 N일 때, 포함한다. (이유 :위의 사진의 문제 힌트 때문)
힌트2 _ 마지막 반환 값을 End(끝 범위)||Start(시작 범위) 값으로 한다.
##입력2 직접 해본 노트 :
##코드 :
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
32
33
34
35
36
|
#include <stdio.h>
#include <stdlib.h>
#pragma warning (disable : 4996)
void BinarySearch(int start, int end, int cnt) {
if (cnt == 0) {
// 종료 조건: cnt가 0이 되면 탐색이 끝났으므로 결과 출력
printf("%d\n", end);
return;
}
int mid = (start + end) / 2;
char tmp;
// 한 문자 입력 ('Y' 또는 'N')
scanf(" %c", &tmp);
// 입력에 따라 범위를 나누어 재귀 호출
if (tmp == 'Y') {
BinarySearch(mid + 1, end, cnt - 1); // 'Y'면 오른쪽 범위 탐색
}
else {
BinarySearch(start, mid, cnt - 1); // 'N'면 왼쪽 범위 탐색
}
}
int main() {
int start, end, cnt;
scanf("%d %d %d", &start, &end, &cnt);
// 이진 탐색 재귀 호출
BinarySearch(start, end, cnt);
return 0;
}
|
cs |
'알고리즘(C언어) > 알고리즘 및 실습 강의' 카테고리의 다른 글
(10)실습7주차_AVL트리_Bh의 정의,4가지회전,Bh계산,트리회전메소드[문제2]_1 (0) | 2024.09.15 |
---|---|
(9)실습7주차_이진탐색트리_전위순회,삽입,삭제_이론+코드[문제1] (0) | 2024.09.14 |
(7)실습6주차_이진탐색+순차자료_[문제2] (1) | 2024.09.10 |
(6)실습6주차_이진탐색+순차자료_[문제1] (0) | 2024.09.10 |
(5)실습5주차_합병정렬과 퀵정렬 (0) | 2024.09.05 |