10814번 - 나이순 정렬
C의 qsort 함수를 이용하고, 순서를 지정해서 stable 하게 만들어 주었습니다.(라고 생각하고있습니다.) 어떤 예외상황이 있을까요?
#include <stdio.h>#include <stdlib.h>
typedef struct _p {int order;int age;char name[100];}PEOPLE;
int mycmp(const void *a, const void *b) {
const PEOPLE *sa = (const PEOPLE *)a;const PEOPLE *sb = (const PEOPLE *)b;int age=sa->age - sb->age;return age !=0? age: sa->order - sb->order;}
int main() {
int i, num;PEOPLE guest[100000];
//initscanf("%d", &num);for (i = 0; i<num; i++)scanf("%d %s", &guest[i].age, guest[i].name);for (i=0; i<num;i++) guest[i].order=i;
qsort(guest, num, sizeof(PEOPLE), mycmp);
for (i = 0; i<num; i++)printf("%d %s\n", guest[i].age, guest[i].name);return 0;}
아 뭐지...음... 이름 배열 크기를 변경하니까 되네요
ㅎ ㅏ처음에 stable, unstable이 문제인줄알고 고민했는데.. 걍 배열크기문제였네요...
그런데 문제에서 이름의 크기가 100자라고 했는데 왜 char arr[101] 로 설정해줘야하나요? 너무 궁금하네요.... null 값 문제는 아닌거같은데...
문자열을 받을 때 끝에 '\0' 널문자가 추가로 들어가기 때문에 최대 크기+1로 문자열 크기를 할당해 주어야 합니다.
@henry1214 감사합니다
댓글을 작성하려면 로그인해야 합니다.
gaelim 6년 전 1
C의 qsort 함수를 이용하고, 순서를 지정해서 stable 하게 만들어 주었습니다.(라고 생각하고있습니다.) 어떤 예외상황이 있을까요?
#include <stdio.h>
#include <stdlib.h>
typedef struct _p {
int order;
int age;
char name[100];
}PEOPLE;
int mycmp(const void *a, const void *b) {
const PEOPLE *sa = (const PEOPLE *)a;
const PEOPLE *sb = (const PEOPLE *)b;
int age=sa->age - sb->age;
return age !=0? age: sa->order - sb->order;
}
int main() {
int i, num;
PEOPLE guest[100000];
//init
scanf("%d", &num);
for (i = 0; i<num; i++)
scanf("%d %s", &guest[i].age, guest[i].name);
for (i=0; i<num;i++)
guest[i].order=i;
qsort(guest, num, sizeof(PEOPLE), mycmp);
for (i = 0; i<num; i++)
printf("%d %s\n", guest[i].age, guest[i].name);
return 0;
}