본문 바로가기

C언어

2025년 여름학기 5주차 C언어

#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;
}

'C언어' 카테고리의 다른 글

2025년 여름학기 7주차 C언어  (1) 2025.08.08
2025년 여름학기 6주차 C언어  (1) 2025.08.02
2025년 여름학기 4주차 C언어  (3) 2025.07.19
2025년 여름학기 3주차 C언어  (1) 2025.07.11
2025년 여름학기 2주차 C언어  (0) 2025.07.06