LIS 문제 푸는 중에 오답이 계속 발생하는데 좀 처럼 오답이 발생하는 입력 값을 찾을 수가 없어서 도움 부탁드립니다.ㅠ
코드는 아래와 같습니다. 아래 알고리즘은 geeksforgeeks 사이트에서 참고했구요~.
#include <stdio.h>
int get_idx(int arr[], int value, int left, int right) {
while (left <= right) {
int center = left + (right-left)/2;
if (arr[center] == value)
return center;
else if (arr[center] > value)
right = center - 1;
else
left = center + 1;
}
}
int get_lis(int arr[], int length) {
int idx_buf[1000] = {0, };
int i, last_pos;
idx_buf[0] = arr[0];
last_pos = 0;
for (i=1;i<length;i++) {
if (arr[i] < idx_buf[0]) {
idx_buf[0] = arr[i];
} else if (arr[i] > idx_buf[last_pos]) {
last_pos++;
idx_buf[last_pos] = arr[i];
} else {
int idx = get_idx(idx_buf, arr[i], 0, last_pos);
idx_buf[idx] = arr[i];
}
}
return last_pos + 1;
}
int main() {
int sequence[1000] = {0, };
int i, j;
int num1, num2;
scanf("%d", &num1);
for (i=0;i<num1;i++) {
scanf("%d", &num2);
for (j=0;j<num2;j++) {
scanf("%d", &(sequence[j]));
}
printf("%d\n", get_lis(sequence, num2));
}
return 0;
}}
10년 전
0개의 댓글이 있습니다.
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면
온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야
합니다. 현재 문제를 푸셨습니다.
yujin.lee
LIS 문제 푸는 중에 오답이 계속 발생하는데 좀 처럼 오답이 발생하는 입력 값을 찾을 수가 없어서 도움 부탁드립니다.ㅠ
코드는 아래와 같습니다. 아래 알고리즘은 geeksforgeeks 사이트에서 참고했구요~.
10년 전