Unreal5 공부/TIL

2026/04/07 TIL

anna59 2026. 4. 7. 20:48

 

오늘의 목표

  • 아침 코드카타 
  • 언리얼 강좌 1-5, 1-6, 1-7 수강
  • 언리얼 과제 1번 풀어보기

추가 목표: 백준 브론즈 문제 2개 이상 풀기

 

 


 

아침 코드카타

[문제] 수박수박수박수박수박수?

길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.

  1. 수박수박수박수박수박수?
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

char* solution(int n) {
    // 리턴할 값은 메모리를 동적 할당해주세요.
    char* answer = (char*)malloc((2 * n) + 1);
    for(int i = 1; i <= n; ++i){
        if(i % 2 == 0){
            answer + i = '수';
        }
        else {
            answer + i = '박';
        }
    }
    answer[2 * n] = '\0';
    
    return answer;
}

 

원하는 크기에 맞게 메모리를 동적할당하고, for 반복문을 통해서 인덱스가 짝수이면 '수'를, 홀수이면 '박'을 저장하도록 작성했다.

 

[오류]

/solution0.c:10:26: error: character too large for enclosing character literal type
answer + i = '수';
^
/solution0.c:13:26: error: character too large for enclosing character literal type
answer + i = '박';
^

 

한글 문자여서 저장이 제대로 되지 않는 것 같다.

해결 방법을 모르겠어서 검색해보았다. 

 

[풀이]

한글 문자는 2~3바이트를 사용하므로 그에 따라 공간을 지정해줘야 한다.

넉넉하게 각 문자당 3바이트로 공간을 설정해준다.

char* answer = (char*)malloc(n * 3 + 1);

 

각 문자 당 어느 정도의 공간을 차지할지 모르므로 문자열을 추가하는 함수를 사용한다.

<string.h>의 strcat

for(int i = 0; i <= n; ++i){
        if(i % 2 == 0){
            strcat(answer, "수");
        }
        else {
            strcat(answer, "박");
        }
    }

 

[오류]

실행한 결괏값 "��VO수�"이 기댓값 "수박수"과 다릅니다.

 

이제 오류는 뜨지 않는데 문자열을 저장할 때 문제가 생기는 것 같다.

 

검색해보니 strcat는 문자열을 저장할 때 문자열의 길이를 처음부터 재서 비효율적이라고 한다. 대신 memcpy를 사용하고 마지막에 문자열 종료 문자 '\0'을 넣어주는 것이 더 효율적이라고 한다.

 

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

char* solution(int n) {
    // 리턴할 값은 메모리를 동적 할당해주세요.
    char* answer = (char*)malloc((n * 3)+ 1);
    for(int i = 0; i < n; ++i){
        if(i % 2 == 0){
            memcpy(&answer[i*3], "수", 3);
        
        }
        else {
            memcpy(&answer[i*3], "박", 3);
        }
    }
    answer[n*3] = '\0';
    return answer;
}

 

 

개념 정리

memcpy

메모리의 일부분을 복사함. 

void *memcpy(void *dest, const void *src, size_t count);

src의 데이터를 dest로 count 바이트만큼 복사하고 dest를 반환한다.

 

 

 

완료한 것

아침 코드카타

언리얼 강좌 1-5~1-7 수강