프로그래머스 코딩 테스트 3일차

2023. 7. 22. 10:14카테고리 없음

 

1. 실수 flo가 매개 변수로 주어질 때, flo의 정수 부분을 return하도록 solution 함수를 완성해주세요.

int solution(double flo) {
    int answer = flo/1;
    return answer;
}

chat GPT 설명..

돌리니까 훨씬 알기가 쉽다.

주어진 코드는 solution이라는 함수를 정의합니다. 이 함수는 double 형태의 매개변수 flo를 받습니다. 그런 다음 flo 값을 1로 나누어 정수로 변환하고, 그 결과를 변수 answer에 할당합니다. 마지막으로, 함수는 answer를 반환합니다.

하지만 1로 나누는 것은 flo의 값에 아무런 영향을 미치지 않습니다. 어떤 수를 1로 나누면 결과적으로 그 수 자체가 그대로 나오기 때문입니다. 따라서 이 함수는 사실상 flo의 소수 부분을 제거하고 정수 부분만 반환하는 역할을 합니다.

함수의 작동 단계를 요약하면 다음과 같습니다:

  1. flo/1: flo를 1로 나누는데, 이는 flo에 영향을 주지 않습니다.
  2. int answer = flo/1;: 나눗셈의 결과를 (즉, flo 자체) 정수 형태로 변환하여 answer 변수에 할당합니다. 소수 부분은 버려집니다.
  3. return answer;: flo의 정수 부분을 반환합니다.

요약하면, 이 함수는 입력으로 주어진 flo의 정수 부분을 반환하며, 소수 부분은 제거됩니다.

 

2. 정수 number와 n, m이 주어집니다. number가 n의 배수이면서 m의 배수이면 1을 아니라면 0을 return하도록 solution 함수를 완성해주세요.

 

int solution(int number, int n, int m) {
    if (number % n == 0 && number % m == 0) {
        return 1; // number가 n과 m의 배수인 경우
    } else {
        return 0; // number가 n과 m의 배수가 아닌 경우
    }
}

 

  • 함수 이름은 solution입니다.
  • number, n, m은 매개변수로 받는 정수형 변수들입니다.
  • int는 함수의 반환 타입을 나타냅니다. 1 또는 0을 반환하므로 int 형태를 사용합니다.
  • number % n은 number를 n으로 나눈 나머지를 계산합니다.
  • number % m은 number를 m으로 나눈 나머지를 계산합니다.
  • 조건문 if를 사용하여 두 개의 조건을 모두 만족할 경우, 즉 number가 n과 m의 배수일 경우, 1을 반환합니다.
  • 두 개의 조건 중 하나라도 만족하지 않으면, 즉 number가 n과 m의 배수가 아닐 경우, 0을 반환합니다.
  • 함수는 주어진 number가 n의 배수이면서 m의 배수인지를 판단하여 결과를 반환합니다.
  • 만약 number가 n의 배수이면서 m의 배수라면 1을 반환합니다.
  • 그렇지 않은 경우 0을 반환합니다.

예를 들어, number = 12, n = 3, m = 4인 경우를 살펴봅시다.

  • number는 12이며, 3으로 나누면 나머지가 0이고, 4로 나누면 나머지가 0입니다.
  • 따라서 number는 3의 배수이면서 4의 배수이므로 함수는 1을 반환합니다.

반대로, number = 10, n = 3, m = 4인 경우를 살펴봅시다.

  • number는 10이며, 3으로 나누면 나머지가 1이고, 4로 나누면 나머지가 2입니다.
  • 따라서 number는 3의 배수이면서 4의 배수가 아니므로 함수는 0을 반환합니다.

이렇게 함수를 사용하여 number가 n의 배수이면서 m의 배수인지를 간단하게 판단할 수 있습니다.

 

3.정수 n이 주어질 때, n을 문자열로 변환하여 return하도록 solution 함수를 완성해주세요.

char* solution(int n) {
    // 정수를 문자열로 변환
    int num_digits = snprintf(NULL, 0, "%d", n); // 변환된 문자열 길이 계산
    char* num_str = (char*)malloc(num_digits + 1); // 길이 + 1 만큼 동적 할당 (+1은 널 종료 문자 '\0'을 위해)
    sprintf(num_str, "%d", n); // 정수를 문자열로 변환하여 num_str에 저장
    return num_str;
}

int main() {
    int num = 12345;
    char* result = solution(num);
    printf("변환된 문자열: %s\n", result);
    free(result); // 동적 할당된 메모리 해제
    return 0;
}

    • solution 함수는 int n이라는 하나의 정수 매개변수를 받습니다.
    • 반환 값으로 char* 형태의 포인터를 가리키는 문자열을 반환합니다.
    • snprintf(NULL, 0, "%d", n)를 사용하여 정수 n을 문자열로 변환하고, 변환된 문자열의 길이를 num_digits에 저장합니다. 이때, 실제로 문자열을 출력하지 않고 길이만 계산하기 위해 첫 번째 인자로 NULL을 전달하고, 두 번째 인자로 0을 전달합니다.
    • char* num_str = (char*)malloc(num_digits + 1);을 사용하여 문자열을 저장할 메모리를 동적으로 할당합니다. 할당된 길이는 num_digits + 1로 정해집니다. +1은 문자열의 끝을 나타내는 널 종료 문자 '\0'을 포함하기 위함입니다.
    • sprintf(num_str, "%d", n);을 사용하여 정수 n을 문자열로 변환하여 num_str에 저장합니다. 이때, %d는 정수를 문자열로 변환하기 위한 포맷 스트링입니다.
    • 문자열로 변환된 num_str을 반환합니다.
        • main 함수에서는 정수 num을 선언하고 12345로 초기화합니다.
        • solution(num)을 호출하여 num을 문자열로 변환한 뒤, 반환된 문자열 주소를 result 포인터에 저장합니다.
        • 변환된 문자열을 출력한 뒤, free(result)를 사용하여 동적으로 할당된 메모리를 해제합니다. 이것은 solution 함수에서 동적 할당한 메모리를 반환하기 위해 수행합니다.

이 코드는 정수를 문자열로 변환하는 함수를 구현한 예시입니다. 함수 내부에서 동적으로 메모리를 할당하여 문자열을 저장하고, 반환하는 문자열은 사용이 끝난 뒤 메모리를 해제하는 것에 유의해야 합니다.

 

4.문자열 my_string과 정수 n이 매개변수로 주어질 때, my_string의 뒤의 n글자로 이루어진 문자열을 return 하는 solution 함수를 작성해 주세요.

char* solution(const char* my_string, int n) {
    int str_length = strlen(my_string); // 문자열의 길이 계산

    // 반환할 문자열의 길이를 계산 (뒤의 n글자로 이루어진 문자열의 길이)
    int return_length = n;
    if (n > str_length)
        return_length = str_length;

    // 동적으로 메모리 할당하여 반환할 문자열 생성
    char* answer = (char*)malloc(return_length + 1); // +1은 널 종료 문자 '\0'을 위함

    // my_string의 뒤에서 n글자를 answer에 복사
    strncpy(answer, my_string + str_length - return_length, return_length);
    answer[return_length] = '\0'; // 문자열의 끝에 널 종료 문자 추가

    return answer;
}

int main() {
    const char* input_str = "Hello, World!";
    int n = 5;

    char* result = solution(input_str, n);
    printf("결과: %s\n", result);
    free(result); // 동적으로 할당된 메모리 해제

    return 0;
}

 

위 코드에서 solution 함수는 입력으로 주어진 문자열 my_string의 뒤에서 n글자로 이루어진 문자열을 생성하고, 그 문자열의 주소를 반환합니다. 함수의 반환값인 answer는 동적으로 할당되어 있으므로 사용이 끝나면 free 함수를 사용하여 메모리를 해제해주어야 합니다.

main 함수에서는 input_str에 "Hello, World!"를, n에 5를 대입하여 solution 함수를 호출한 후, 반환된 문자열을 출력합니다. 이후 free 함수를 사용하여 메모리를 해제합니다.

예시를 들어, "Hello, World!"와 n이 5로 주어졌을 때, solution 함수는 문자열 "World!"를 동적으로 생성하고 해당 문자열의 주소를 반환합니다. 출력 결과는 "World!"가 될 것입니다.

 

솔직히 생각하는거.. 그냥 코드를 외워야 곘음

분명 c언어 강의를 들었는데 이러는거면 그냥 외워야 하는 것.