이 문제 c언어로 이분탐색 구현해서 풀고 있는데,
내가 짠 코드로는 계속 무한루프 들어가져서 왜그런 지 당체 모르겠음...
좀 도와주라ㅠ;
코드
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
char site[21];
char pw[21];
}Info;
Info in[100001];
char target[100001][21];
int compare(const void* a, const void* b) {
const Info *str1 = (Info*)a;
const Info *str2 = (Info*)b;
return strcmp(str1->site, str2->site);
}
int main() {
int n, m;
scanf("%d %d", &n, &m);
for (int i = 0; i < n; i++) {
scanf("%s %s", in[i].site, in[i].pw);
}
qsort(in, n, sizeof(Info), compare);
for (int i = 0; i < m; i++) {
scanf("%s", target[i]);
}
for (int i = 0; i < m; i++) {
printf("1\n"); //checking
int s = 0, e = n - 1;
while (s <= e) {
int mid = (s + e) / 2;
printf("2\n"); // checking
if (target[i] == in[mid].site) {
printf("%s\n", in[mid].pw);
break;
}
else if (target[i] < in[mid].site) {
s = mid - 1;
}
else if (target[i] > in[mid].site) {
e = mid + 1;
}
printf("3\n"); // checking
}
}
}
target[i]랑 in[mid].site 비교할때 strcmp 사용해야하는거 아닌?
그래도 똑같더라고요
그리고 아마도 귀하 의도한 대로라면 s e 옮기는거 아마도 반대로 되어있음
순서대로 e = mid-1, s = mid+1
어미친시발그러네 개병신새끼
응애
아니 이거 왜안되나하고 계속 바꾸다가 저렇게 됐나봐요ㅠ 원랜 제대로 해놧엇는데 고맙습니다...
좋아요
궁금한거있는데 이문제 해시맵(딕셔너리,오브젝트)으로 풀면 어케댐?
순수c언어엔 키:밸루쌍 없음?
c언어엔 map이 따로없어서 구현해줘야되고, c++같은거로 map 쓰면 10줄인가? 이내로 풀리더라고요
순수 c언어는 그냥 트립구현하셈 map stl을 직접 구현하면서 새로운 기능도 만들수 있으니깐