ํฐ์คํ ๋ฆฌ ๋ทฐ
[์ฌ์ ] ์ด์งํ์(์ฌ๊ท, ๋น์ฌ๊ท, ์ซ์๋ง์ถ๊ธฐ)
ํด๋์๊ทธ 2021. 10. 20. 00:07์ด์งํ์ - ์ฌ๊ท ๋ฒ์
- x ≤ k ๋ฅผ ๋ง์กฑํ๋ ์ฌ์ ์ ํค x ์ค ๊ฐ์ฅ ํฐ ๊ฐ์ ์์น(์ฆ, ์ธ๋ฑ์ค) ์ถ๋ ฅ
(์์น๋ 0๋ถํฐ ์์ํ๋ค๊ณ ๊ฐ์ ํ๊ณ , ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ x๊ฐ ์๋ ๊ฒฝ์ฐ –1 ์ถ๋ ฅ)
- ์ฆ, ํค k๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ์๋ k์ ์์น๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๊ณ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ k๋ณด๋ค ์์ผ๋ฉด์ ๊ฐ์ฅ ํฐ ์์ ์์น๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ค.
์
๋ ฅ ์์ 1
8 -7 โฆ n = 8, k = –7
์ถ๋ ฅ ์์ 1
-92 -31 -7 4 14 20 29 44
โก2 โฆ ์ฌ์ ์์ -7์ ์์น๋ 2
์
๋ ฅ ์์ 2
8 33 โฆ n = 8, k = 33
์ถ๋ ฅ ์์ 2
-92 -31 -7 4 14 20 29 44
โก6 โฆ ๋ฌธ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ฌ์ ์ ํค๋ 29์ด๊ณ , ์ฌ์ ์์ 29์ ์์น๋ 6
#include <stdio.h>
#include <stdlib.h>
int n;// ๋ฐฐ์ด ํฌ๊ธฐ
int* D;//์ฌ์
int t;
int rFE(int k, int left, int right) {
int mid;
if (left > right)
return -1;
mid = (left + right) / 2;
if (k == D[mid])
return mid;
else if (k < D[mid])
return rFE(k, left, mid - 1);
else {// if(k > D[mid])
t = mid;
return rFE(k, mid + 1, right);
}
}
int findElement(int k) {
return rFE(k, 0, n-1);
}
int main() {
int k;// ํ์ํ ํค k
int result;
scanf("%d %d", &n, &k);
D = (int*)malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
scanf("%d", &D[i]);
getchar();
}
result = findElement(k);
if (result == -1) {
if (t != NULL)
printf(" %d", t);
else
printf(" %d", result);
}
else
printf(" %d", result);
return 0;
}
์ด์งํ์ - ๋น์ฌ๊ท ๋ฒ์
์ถ๋ ฅ (๋ฌธ์ 1๊ณผ ์ฝ๊ฐ ๋ค๋ฆ์ ์ฃผ์)
- x ≥ k ๋ฅผ ๋ง์กฑํ๋ ์ฌ์ ์ ํค x ์ค ๊ฐ์ฅ ์์ ๊ฐ์ ์์น(์ฆ, ์ธ๋ฑ์ค) ์ถ๋ ฅ
(์์น๋ 0๋ถํฐ ์์ํ๋ค๊ณ ๊ฐ์ ํ๊ณ , ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ x๊ฐ ์๋ ๊ฒฝ์ฐ n ์ถ๋ ฅ)
์
๋ ฅ ์์ 1
8 -100 โฆ n = 8, k = -100
-92 -31 -7 4 14 20 29 44
์ถ๋ ฅ ์์ 1
โก0 โฆ ๋ฌธ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ฌ์ ์ ํค๋ -92์ด๊ณ , ์ฌ์ ์์ -92์ ์์น๋ 0
์
๋ ฅ ์์ 2
8 55 โฆ n = 8, k = 55
-92 -31 -7 4 14 20 29 44
์ถ๋ ฅ ์์ 2
โก8 โฆ 55๋ณด๋ค ํฐ ์ฌ์ ์ ํค๋ ์์
#include <stdio.h>
#include <stdlib.h>
int n;// ๋ฐฐ์ด ํฌ๊ธฐ
int* D;//์ฌ์
int t = -999999;
int findElement(int k) {
int left = 0;
int right = n - 1;
int mid;
while (left <= right) {
mid = (left + right) / 2;
if (k == D[mid])
return mid;
else if (k < D[mid]) {
t = mid;
right = mid - 1;
}
else {// if(k > D[mid])
left = mid + 1;
}
}
return -1;
}
int main() {
int k;// ํ์ํ ํค k
int result;
scanf("%d %d", &n, &k);
D = (int*)malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
scanf("%d", &D[i]);
getchar();
}
result = findElement(k);
if (result == -1) {
if (t == -999999)
printf(" %d", n);
else
printf(" %d", t);
}
else
printf(" %d", result);
return 0;
}
์ด์งํ์์ ์์ฉํ ์ซ์ ๋ง์ถ๊ธฐ ๊ฒ์ (๋น์ฌ๊ท ๋ฐฉ์ ์ฌ์ฉํจ)
- ์น๊ตฌ๋ k > m ์ธ์ง, Y(์)/N(์๋์ค)์ผ๋ก ์๋ ค์ค๋ค. (์ฌ๊ธฐ์ m์ a์ b์ฌ์ด์ ์ค๊ฐ๊ฐ์ผ๋ก, m =๏(a + b)/2๏์ด๋ค. ๏๏๋ ๋ด๋ฆผ ๊ธฐํธ)
- ๋ต์ด Y์ธ ๊ฒฝ์ฐ, m + 1 ≤ k ≤ b ์ด๋ฏ๋ก a์ ๊ฐ์ m + 1๋ก ๋ฐ๊พผ๋ค.
- ๋ต์ด N์ธ ๊ฒฝ์ฐ, a ≤ k ≤ m ์ด๋ฏ๋ก b๋ฅผ m์ผ๋ก ๋ฐ๊พผ๋ค.
์
๋ ฅ ์์ 1
10 20 3 โฆ a = 10, b = 20, Y/N์ ๊ฐ์ 3๊ฐ
NNY
์ถ๋ ฅ ์์ 1
12 โฆ k = 12
์
๋ ฅ ์์ 2
1 1000 10 โฆ a = 1, b = 1000, Y/N์ ๊ฐ์ 10๊ฐ
NYYNYNYYNY
์ถ๋ ฅ ์์ 2
421 โฆ k = 421
#include <stdio.h>
#include <stdlib.h>
//๋น์ฌ๊ท
int findElement(int a, int b, int num, char str[]) {
int mid;
int k = 0, i = 0;
while(1) {
mid = (a + b) / 2;
if (a == b) {
k = mid;
break;
}
if (str[i] == 'Y') {
a = mid + 1;
}
else {
b = mid;
}
i++;
}
return k;
}
int main() {
int a, b, num;// a, b ๊ฐ, Y/N์ ๊ฐฏ์
char str[1000];
int k = 0;
scanf("%d %d %d", &a, &b, &num);
scanf("%s", str);
k = findElement(a, b, num, str);
printf("%d", k);
return 0;
}
'Programming > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ์ํธ๋ฆฌ] ์ด์งํ์ํธ๋ฆฌ (0) | 2021.10.20 |
---|---|
[์ฌ์ ] ์ด์งํ์ ์์ฉ, ๋จ์ผ๋ชจ๋ ๋ฐฐ์ด (0) | 2021.10.20 |
[ํต ์ ๋ ฌ] ๋ฐฐ์ด์ ์ด์ฉํ ํต ์ ๋ ฌ ๊ตฌํ (0) | 2021.10.19 |
[ํฉ๋ณ ์ ๋ ฌ] ๋จ์ผ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํ ํฉ๋ณ์ ๋ ฌ ๊ตฌํ (0) | 2021.10.19 |
[ํ๊ณผ ํ์ ๋ ฌ] ํ ์ ๋ ฌ (์์ฐจํ, ์ต๋ํ) (0) | 2021.09.29 |
- Total
- Today
- Yesterday
- ์ฝ๋ฉ๊ณต๋ถ
- MYSQL
- ํ ํฌ์๋ฐ
- ์ฝํ
- AI์ปจํผ๋ฐ์ค
- ์ฝ๋ฉ์๋ฌ
- ํ์ด์ฌ
- ์ฝํ ์ค๋น
- DALLE
- C์ธ์ด
- gan
- StableDiffusion
- WGAN
- ๊ธฐ์ ์ปจํผ๋ฐ์ค
- ๊ตฌ๊ธ์ฝ๋ฉ
- SKTECHSUMMIT
- lgaimers
- ์คํ ์ด๋ธ๋ํจ์
- ํ๋ก๊ทธ๋๋จธ์ค
- AIRUSH2023
- ๋ ผ๋ฌธ์ฝ๊ธฐ
- ๋๋ฆผ๋ถ์ค
- dreambooth
- AIRUSH
- Aimers
- ํ์ด์ฌ์ฝํ
- ๋ ผ๋ฌธ๋ฆฌ๋ทฐ
- SQL
- HyperCLOVA
- CLOVAX
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |