본문 바로가기

c언어22

백준 11650 (qsort 활용) compare 함수를 적절히 만들어 주면 백준의 11650번을 풀 수 있다. typedef struct { int x; int y; } coord; int compare(const void *a, const void *b) { coord A = *(coord *)a; //coord형의 A로 입력받은 a를 사용할 수 있게한다. coord B = *(coord *)b; if (A.x > B.x) // 구조체의 x를 끌고와서 사용한다. 오름차순 정렬 return 1; else if (A.x == B.x) // x좌표가 같다면, { if (A.y > B.y) // y좌표를 비교한다. 오름차순 정렬 return 1; else return -1; // 그게 아니라면 -1반환. } return -1; // A.x <.. 2022. 11. 8.
c언어 내장함수 qsort 퀵정렬 함수 (qsort라는 이름을 가지고 있다) 는 stdlib.h 안에 내장 되어있다. 퀵정렬은 구현이 어렵다고 하니 내장함수를 잘 활용해 보자. qsort의 인자는 4개가 있다. 첫 번째 인자는 정렬하고자 하는 배열. 두 번째 인자는 배열의 크기(원소의 개수) (보통 sizeof(arr) / sizeof(int)를 쓰지만, 배열의 크기 n을 동적할당 받으면 n이라고 입력해도 무방하다.) 세 번째 인자는 원소 하나의 크기 (보통 정수를 정렬하고자 하므로 sizeof(int)가 주로 쓰일 것이다.) 네 번째 인자는 비교함수. 비교함수의 기본적인 형태는 아래와 같다. int compare (void *first, void *second){ if(*(int*)first > *(int*)second) ret.. 2022. 11. 8.
c에서 공백포함 문자열 입력 int word[100]; gets[word]; 이렇게 하거나 scanf("%[^\n]s", word); 이렇게 하면 공백이 포함된 문자를 입력받을 수 있다. 2022. 10. 8.
반복문에서 함수 실행 (시간을 줄이는 법) 예를 들어 for(int i = 0; i < strlen(arr); i++) 이런식으로 코드를 짜면 반복문이 한 바퀴 돌때마다 strlen 함수를 실행해야 되서 시간을 많이 잡아먹는다. 이럴 때는 int len = strlen(arr); for(int i = 0; i < len; i++) 이런 식으로 함수값을 변수에 넣어놓고 그 변수를 반복문 안에 넣어주면 시간을 단축할 수 있다. 2022. 10. 8.