#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
//필요한 헤더를 가져와준다
#define MAX 50
// 숫자의 합을 계산하는 함수다
//비교함수의 코드가 길어질 것 같아서 따로 빼줬다
int num_sum(const char* s) {
int sum = 0;
for (int i = 0; s[i]; i++) {
if (isdigit(s[i])) {
sum += s[i] - '0';
}
}
return sum;
}
// 비교 함수다
int compare(const void* a, const void* b) {
char* s1 = *(char**)a;
char* s2 = *(char**)b;
int len1 = strlen(s1);
int len2 = strlen(s2);
if (len1 != len2) { //첫번째로 길이를 비교한다
return len1 - len2;
} else {
//각 자리수의 합을 비교한다
int sum1 = num_sum(s1);
int sum2 = num_sum(s2);
if (sum1 != sum2) {
return sum1 - sum2;
} else {
//사전값을 비교한다
return strcmp(s1, s2);
}
}
}
int main() {
int N;
scanf("%d", &N);
char serial[N][MAX + 1];
char* serial_p[N];
for (int i = 0; i < N; i++) {
scanf("%s", serial[i]);
serial_p[i] = serial[i];
}
qsort(serial_p, N, sizeof(char*), compare);
//qsort함수에 넣어서 비교한다
for (int i = 0; i < N; i++) {
printf("%s\n", serial_p[i]);
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
// 비교 함수
int compare(const void* a, const void* b) {
return *(int*)a - *(int*)b;
}
int main() {
int N, L;
scanf("%d %d", &N, &L);
int x[1000];
for (int i = 0; i < N; i++) {
scanf("%d", &x[i]);
x[i] *= 2;
// 2배로 크게 해줘서 푼다. 이유는 잘 모르겠지만 double로 하면 오류가 나는 것 같아서 이렇게 한다
}
qsort(x, N, sizeof(int), compare);
//가장 가까운거 부터 순서대로 두게한다. 문제에서 가장 먼 것 부터 놓인 경우가 있기 때문이다
int count = 0;
int on = 0;
//for문으로 테이프를 붙일 개수를 센다.
for (int i = 0; i < N; i++) {
int off_s= x[i] - 1; // 0.5를 2배하면 1
if (off_s >= on) {
on = off_s + L * 2; // 테이프로 덮는 번위의 끝이 갱신된다. 테이프 길이도 2배로 해준다
count++;
}
}
printf("%d\n", count);
return 0;
}