ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 1755번 : 숫자놀이 (C 언어)
    c c++ 언어 공부 2023. 9. 22. 10:11

    https://www.acmicpc.net/problem/1755

     

    1755번: 숫자놀이

    79를 영어로 읽되 숫자 단위로 하나씩 읽는다면 "seven nine"이 된다. 80은 마찬가지로 "eight zero"라고 읽는다. 79는 80보다 작지만, 영어로 숫자 하나씩 읽는다면 "eight zero"가 "seven nine"보다 사전순으로

    www.acmicpc.net

    Code:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    char nums[11][10= {
        "zero""one""two""three""four""five""six""seven""eight""nine"
    };
     
    typedef struct {
        int num;
        char english[100];
    }abc;
     
    int compare(const void* a, const void* b)
    {
        abc* A = (abc*)a;
        abc* B = (abc*)b;
     
        return strcmp(A->english, B->english);
    }
     
    int main()
    {
        int m, n;
        scanf("%d %d"&m, &n);
        abc arr[100= { 0 };
        int a = 0;
        int count = 0;
        for (int i = m; i <= n; i++)
        {
            arr[a++].num = i;
        }
        for (int i = 0; i < a; i++)
        {
            if (arr[i].num < 10)
            {
                strcpy(arr[i].english, nums[arr[i].num]);
            }
            else
            {
                int num1, num2;
                num1 = arr[i].num / 10;
                num2 = arr[i].num % 10;
                strcpy(arr[i].english, nums[num1]);
                strcat(arr[i].english, nums[num2]);
            }
        }
        qsort(arr, a, sizeof(abc), compare);
        for (int i = 0; i < a; i++)
        {
            if (count == 10)
            {
                printf("\n");
                count = 0;
            }
            printf("%d ", arr[i].num);
            count++;
        }
    }
    cs

    문제 설명

    주어진 문제는 정수 M부터 N까지의 범위에서, 각 정수를 영어로 읽었을 때 숫자를 하나씩 분리하여 사전순으로 정렬한 후, 10개씩 한 줄에 출력하는 것입니다. 주어진 범위 내의 정수를 영어로 읽는 방법은 사전에 정의된 영어 단어들을 사용하여 만들어진 문제입니다.

    코드 설명

    구조체 정의

     

    구조체 abc는 정수(num)와 해당 정수를 영어로 읽었을 때의 표현(english)을 저장하는 구조체입니다.

    문자열 배열 초기화

     

    문자열 배열 nums에는 0부터 9까지의 정수에 대한 영어 단어 표현이 저장되어 있습니다.

    정렬을 위한 비교 함수

     

    qsort 함수를 사용하여 정렬하기 위한 비교 함수입니다. english 필드에 대해 문자열을 비교하여 사전순으로 정렬합니다.

    정수를 영어 표현으로 변환

     

    주어진 범위의 정수를 영어 표현으로 변환하여 구조체 배열 arr에 저장합니다. 정수가 10 미만인 경우는 바로 영어 표현을 가져와 저장하고, 10 이상인 경우 십의 자리와 일의 자리를 나누어 각각의 영어 표현을 합쳐 저장합니다.

    정렬 및 출력

     

    qsort 함수를 사용하여 구조체 배열 arr을 사전순으로 정렬한 후, 10개씩 출력하여 문제에서 요구하는 출력 형식에 맞게 출력합니다. 출력할 때는 정수 자체를 출력합니다.

Designed by Tistory.