ν°μ€ν 리 λ·°
[μ¬μ ] μ΄μ§νμ μμ©, λ¨μΌλͺ¨λ λ°°μ΄
ν΄λμκ·Έ 2021. 10. 20. 04:30λ¬Έμ 1: μ λ ¬λμ΄ μλ nκ°μ μ μ ν€(μ¬μ )μ νμν ν€ k1, k2λ₯Ό μ λ ₯λ°μ, μ¬μ μμ k1 ≤ k ≤ k2 λ₯Ό λ§μ‘±νλ μμΉλ€μ μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±
- μ¬κ· λ²μ ꡬν
μ
λ ₯ μμ 1
8 –7 15 β¦ n=8, k1=–7, k2=15
-92 -31 -7 4 14 20 29 44
μΆλ ₯ μμ 1
β‘2 3 4 β¦ μ¬μ μμ -7μ μμΉλ 2, 15λ³΄λ€ μμΌλ©΄μ κ°μ₯ ν° μμΉλ 4
μ
λ ₯ μμ 2
8 33 40 β¦ n=8, k1=33, k2=40
-92 -31 -7 4 14 20 29 44
μΆλ ₯ μμ 2
β‘-1 β¦ λ¬Έμ 쑰건μ λ§μ‘±νλ μ¬μ μ ν€ μμ
#include <stdio.h>
#include <stdlib.h>
int t1 = 0;
int t2 = NULL;
int rFE(int k, int left, int right, int X[]) {
int mid;
if (left > right)
return -1;
mid = (left + right) / 2;
if (k == X[mid])
return mid;
else if (k < X[mid]) {
t1 = mid;
return rFE(k, left, mid - 1, X);
}
else {
t2 = mid;
return rFE(k, mid + 1, right, X);
}
}
int findElement(int k, int n, int X[]) {
return rFE(k, 0, n - 1, X);
}
int main() {
int n, k1, k2;
int* X;
int a, b;
scanf("%d %d %d", &n, &k1, &k2);
X = (int*)malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
scanf("%d", &X[i]);
}
a = findElement(k1, n, X);
if (a == -1) {
if (t1 != 0)
a = t1;
}
b = findElement(k2, n, X);
if (b == -1) {
if (t2 != NULL)
b = t2;
}
if ((a != -1 && b != -1) && (a <= b)) {
for (int i = a; i <= b; i++) {
printf(" %d", i);
}
}
else
printf(" -1");
free(X);
return 0;
}
* rFEν¨μμμ μ¬κ· λ°©μμΌλ‘ ꡬννλκΉ return rFE(~~~) ν΄μΌν¨.
** x[mid] κ°μ΄λ λΉκ΅ν λ xλ°°μ΄ μμ mid λ£λκ±° μμ§μκΈ°!!!!!!!!!!!!!
λ¬Έμ 2: ν΄λΉ λ°°μ΄μ΄ λ¨μΌλͺ¨λ λ°°μ΄μΈμ§ νμΈ & ν΄λΉ λ°°μ΄μ μ΅λ ν€ νΉμ μ΅μ ν€λ₯Ό μΆλ ₯
- ν¬κΈ°κ° nμΈ λ°°μ΄μ λμ ν λΉνμ¬, μ
λ ₯λ μ¬μ μ ν€ μ μ₯(μ€λ³΅ ν€λ μλ€κ³ κ°μ )
- ν΄λΉ λ°°μ΄μ΄ λ¨μΌλͺ¨λμΈμ§ νμΈ (μ¦κ°→κ°μ / κ°μ→μ¦κ°)
- μ΄μ§νμκ³Ό μ μ¬ν ννλ‘ ν΄λΉ λ°°μ΄μ μ΅λ ν€ νΉμ μ΅μ ν€ μΆλ ₯ – O(log n) μκ° νμ
μ
λ ₯ μμ 1
9 β¦ n=9
-21 8 12 13 35 41 23 20 17
μΆλ ₯ μμ 1
β‘1 41 β¦ μ¦κ°→κ°μ λ¨μΌλͺ¨λ 1 / μ΅λκ° 41
μ
λ ₯ μμ 2
9 β¦ n=9
-21 8 12 13 -1 41 23 20 17
μΆλ ₯ μμ 2
β‘0 β¦ λ¨μΌλͺ¨λ λ°°μ΄ μλ 0
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// λ¨μΌλͺ¨λ
int check(int *x, int n) {
int flag = 0;
int t1 = 0, t2 = 0;// κ°―μ 체ν¬
for (int i = 0; i < n-1; i++) {
if (x[i] < x[i + 1]) {
flag = 1;
t1++;
}
else if (flag == 1) {
for (int j = i; j < n-1; j++) {
if (x[j] > x[j + 1]) {
t1++;
flag = 2;
i++;
}
}
}
if (t1 == n-1) {
flag = 1;
break;
}
else if (flag == 2) {
break;
}
}
if (t1 != n - 1 && (flag == 1 || flag == 0)) {
for (int i = 0; i < n - 1; i++) {
if (x[i] > x[i + 1]) {
flag = -1;
t2++;
}
else if (flag == -1) {
for (int j = i; j < n - 1; j++) {
if (x[j] < x[j + 1]) {
t2++;
flag = 2;
i++;
}
}
}
if (t2 == n - 1) {
flag = -1;
break;
}
else if (flag == 2) {
break;
}
}
}
return flag;
}
int findMaxOfUnimodalArray(int* x, int n) {
int a = 0;
int b = n - 1;
int mid;
while (a < b) {
mid = (a + b) / 2;
if (x[mid] < x[mid + 1])
a = mid + 1;
if (x[mid] > x[mid + 1])
b = mid;
}
return x[a];
}
int findMinOfUnimodalArray(int* x, int n) {
int a = 0;
int b = n - 1;
int mid;
while (a < b) {
mid = (a + b) / 2;
if (x[mid] > x[mid + 1])
a = mid + 1;
if (x[mid] < x[mid + 1])
b = mid;
}
return x[a];
}
int main() {
int n, * x;
int chk, r;
scanf("%d", &n);
x = (int*)malloc(sizeof(int) * n);
if (x == NULL) {
printf("Not enough memory!");
return -1;
}
for (int i = 0; i < n; i++) {
scanf("%d", &x[i]);
}
//λ¨μΌλͺ¨λ νμΈ
chk = check(x, n);
if (chk == 1) {//λ¨μΌλͺ¨λ μ¦->κ°
r = findMaxOfUnimodalArray(x, n);
printf(" %d %d", chk, r);
}
else if (chk == -1) {//λ¨μΌλͺ¨λ κ°->μ¦
r = findMinOfUnimodalArray(x, n);
printf(" %d %d", chk, r);
}
else {// λ¨μΌλͺ¨λ γ΄γ΄
printf(" 0");
}
free(x);
return 0;
}
'Programming > μκ³ λ¦¬μ¦' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[ν΄μν μ΄λΈ] (0) | 2021.11.22 |
---|---|
[νμνΈλ¦¬] μ΄μ§νμνΈλ¦¬ (0) | 2021.10.20 |
[μ¬μ ] μ΄μ§νμ(μ¬κ·, λΉμ¬κ·, μ«μλ§μΆκΈ°) (0) | 2021.10.20 |
[ν΅ μ λ ¬] λ°°μ΄μ μ΄μ©ν ν΅ μ λ ¬ ꡬν (0) | 2021.10.19 |
[ν©λ³ μ λ ¬] λ¨μΌμ°κ²°λ¦¬μ€νΈλ₯Ό μ΄μ©ν ν©λ³μ λ ¬ ꡬν (0) | 2021.10.19 |
- Total
- Today
- Yesterday
- gan
- AI컨νΌλ°μ€
- AIRUSH
- μ½ν
- SKTECHSUMMIT
- SQL
- ꡬκΈμ½λ©
- Aimers
- StableDiffusion
- WGAN
- νμ΄μ¬
- DALLE
- ν ν¬μλ°
- CLOVAX
- μ½ν μ€λΉ
- μ€ν μ΄λΈλν¨μ
- νμ΄μ¬μ½ν
- CμΈμ΄
- MYSQL
- lgaimers
- λλ¦ΌλΆμ€
- μ½λ©κ³΅λΆ
- dreambooth
- κΈ°μ 컨νΌλ°μ€
- νλ‘κ·Έλλ¨Έμ€
- HyperCLOVA
- μ½λ©μλ¬
- AIRUSH2023
- λ Όλ¬Έλ¦¬λ·°
- λ Όλ¬Έμ½κΈ°
μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
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 |