반응형

#문제1 A 학교에서는 단체 티셔츠를 주문하기 위해 학생별로 원하는 티셔츠 사이즈를 조사했습니다. 선택할 수 있는 티셔츠 사이즈는 작은 순서대로 "XS", "S", "M", "L", "XL", "XXL" 총 6종류가 있습니다.

학생별로 원하는 티셔츠 사이즈를 조사한 결과가 들어있는 배열 shirt_size와 shirt_size의 길이 shirt_size_len이 매개변수로 주어질 때, 사이즈별로 티셔츠가 몇 벌씩 필요한지 가장 작은 사이즈부터 순서대로 배열에 담아 return 하도록 solution 함수를 완성해주세요.


매개변수 설명

학생별로 원하는 사이즈를 조사한 결과가 들어있는 배열 shirt_size와 shirt_size의 길이 shirt_size_len이 solution 함수의 매개변수로 주어집니다.

  • shirt_size_len은 1 이상 100 이하의 자연수입니다.
  • shirt_size 에는 치수를 나타내는 문자열 "XS", "S", "M", "L", "XL", "XXL" 이 들어있습니다.

return 값 설명

티셔츠가 사이즈별로 몇 벌씩 필요한지 가장 작은 사이즈부터 순서대로 배열에 담아 return 해주세요.

  • return 하는 배열에는 [ "XS" 개수, "S" 개수, "M" 개수, "L" 개수, "XL" 개수, "XXL" 개수] 순서로 들어있어야 합니다.

예시

shirt_size shirt_size_len return

["XS", "S", "L", "L", "XL", "S"] 6 [1, 2, 0, 2, 1, 0]

예시 설명

  • "XS"와 "XL"은 각각 한 명씩 신청했습니다.
  • "S"와 "L"은 각각 두 명씩 신청했습니다.
  • "M"과 "XXL"을 신청한 학생은 없습니다.

따라서 순서대로 [1, 2, 0, 2, 1, 0]을 배열에 담아 return 하면 됩니다.

문제

// You may use include as below.
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int* solution(char* shirt_size[], int shirt_size_len) {
    // Write code here.
    int* answer;
    return answer;
}

// The following is main function to output testcase.
int main() {
    char* shirt_size[] = {"XS", "S", "L", "L", "XL", "S"};
    int shirt_size_len = 6;
    int* ret = solution(shirt_size, shirt_size_len);

    // Press Run button to receive output.       
    printf("Solution: return value of the function is {");
    for(int i = 0; i < 6; i++){
        if (i != 0) printf(", ");
        printf("%d", ret[i]);
    }
    printf("} .\\n");
}

정답

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>

int* solution(char* shirt_size[], int shirt_size_len) {
    int* size_counter = (int*)malloc(sizeof(int)*6);
    for(int i = 0; i < 6; ++i)
        size_counter[i] = 0;
    for(int i = 0; i < shirt_size_len; ++i) {
        if(strcmp(shirt_size[i],"XS") == 0)
            size_counter[0]++;
        else if(strcmp(shirt_size[i],"S") == 0)
            size_counter[1]++;
        else if(strcmp(shirt_size[i],"M") == 0)
            size_counter[2]++;
        else if(strcmp(shirt_size[i],"L") == 0)
            size_counter[3]++;
        else if(strcmp(shirt_size[i],"XL") == 0)
            size_counter[4]++;
        else if(strcmp(shirt_size[i],"XXL") == 0)
            size_counter[5]++;
    }
    return size_counter;
}

몰랐던 부분

함수 **solution**의 시그니처를 보면 **int***과 char* shirt_size[] 두 가지 포인터가 나옵니다. 각각의 역할은 다음과 같습니다:

  1. int*: 이것은 함수의 반환 유형입니다. **int***은 정수를 가리키는 포인터를 나타냅니다. 이 함수는 정수형 포인터를 반환하는 것으로 정의되어 있으며, 반환된 포인터는 int 형식의 배열을 가리키게 됩니다.
  2. char* shirt_size[]: 이것은 함수의 매개변수입니다. **char* shirt_size[]**는 문자열을 가리키는 포인터 배열을 나타냅니다. 함수는 **shirt_size**라는 이름의 포인터 배열을 받으며, 각 포인터는 문자열을 가리키게 됩니다. 이 배열의 길이는 shirt_size_len 매개변수를 통해 전달됩니다.

strcmp(shirt_size[i],"XS") 에서도 strcmp 안에 2가지의 문자열을 비교해서 같다면 0을 반환 하는 것

반응형