Unreal5 공부/TIL

2026/04/06 TIL

anna59 2026. 4. 6. 20:51

오늘의 목표

  • 아침 코드카타
  • 언리얼 강의 수강

 


 

아침 코드카타

 

[문제] 가운데 글자 가져오기

 

주어진 스트링 s의 가운데 글자를 가져오는 문제이다.

이번에는 최대한 검색 없이 기억만으로 문제를 풀어보려고 했다. 

 

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

// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
char* solution(const char* s) {
    // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
    char* answer = (char*)malloc(1);
    char* word = (char*)malloc(100);
    int len = 0;
    for(int i = 0; *(s + i) != '\0'; ++i){
        word = word + *(s + i);
        ++len;
    }
    
    realloc(answer, (char*)malloc(100));
    
    
    
    return answer;
}

 

그런데 char* 배열을 c언어에서 어떻게 순환했는지 기억이 안 나서 아주 큰일이 났다.

일단 char* 배열 마지막에 '\0'이 들어있는 걸 이용해서 순환해보려고 했는데, 순환이 잘못되었는지 core dump 오류가 떠서 곤란했다. 

 

이후 검색해서 문제를 풀어보았다.

 

<구상>

substring을 만드는 함수를 이용해서 중간값을 알아내보고 싶다.

일단 char*의 길이를 알아내서 절반 위치의 인덱스가 몇인지 알아낸 후, 해당 인덱스의 글자만 substring로 떼 오는 방식으로 코드를 써보겠다.

 

<풀이>

char* 길이를 알아내는 법

<string.h> 헤더의 strlen() 함수를 사용하면 된다.

int len = (int)strlen(s);

 

그 후 만약에 len이 짝수라면 (len % 2 == 0) 

answer을 realloc으로 재할당해주고, len / 2 - 1 부터 len / 2 까지의 숫자를 strncpy로 분리해낸다.

len이 홀수라면 strncpy로 len / 2를 분리해낸다. 

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

// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
char* solution(const char* s) {
    // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
    char* answer = (char*)malloc(1);
    int len = (int)strlen(s);
    if(len%2 == 0){
        realloc(answer, sizeof(char) * 3);
        strncpy(answer, s + (len / 2) - 1, 2);
        
            
    }
    else {
        strncpy(answer, s + (len / 2), 1);
    }

    
    
    
    return answer;
}

 

[오류]

실행한 결괏값 "c\u000b�w�"이 기댓값 "c"과 다릅니다.

뒤에 쓰레기값이 붙어서 나오는 것을 알 수 있다. 

아마 answer 뒤에 문자열 종료 문자가 없어서 그런 것 같으니 문자열 종료 문자를 추가해준다.

 

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

// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
char* solution(const char* s) {
    // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
    char* answer = (char*)malloc(1);
    int len = (int)strlen(s);

    if(len%2 == 0){
        realloc(answer, sizeof(char) * 3);
        strncpy(answer, s + (len / 2) - 1, 2);
        *(answer + 2) = '\0';
    }
    else {
        realloc(answer, sizeof(char) * 2);
        strncpy(answer, s + (len / 2), 1);
        *(answer + 1) = '\0';
    }

    return answer;
}

 

사용한 함수 개념 정리

 

c언어 기반

strlen(string s) : string (char *)의 길이를 구하는 함수

size_t strlen(const char *str);

 

malloc : 동적 할당 함수

void* malloc(size_t size);

 

realloc : 이미 할당된 메모리 재할당

void* realloc(void* ptr, size_t size);

 

strncpy: string의 특정 부분을 카피

char* strncpy(char* destination, const char* source, size_t num);

 

 

 

언리얼 강의 수강 (완료)