오늘의 목표

아침 코드카타

언리얼 마스터 과제

언리얼 멀티플레이 강의 듣기, 10번 과제 하기

 


 

코드카타

 

오늘의 문제

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

// cards1_len은 배열 cards1의 길이입니다.
// cards2_len은 배열 cards2의 길이입니다.
// goal_len은 배열 goal의 길이입니다.
// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
char* solution(const char* cards1[], size_t cards1_len, const char* cards2[], size_t cards2_len, const char* goal[], size_t goal_len) {
    // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
    char* answer = (char*)malloc(4 * sizeof(char));
    answer[0] = '\0';
    bool card1_found = false;
    bool card2_found = false;
    
    
    
    for (size_t i = 0; i < goal_len; ++i)
    {
        
        card1_found = false;
        card2_found = false;
        
        char* current_goal = goal[i];
        printf("current_goal: %s\n", current_goal);
        // card 1에 카드 존재하는지 찾기
        if (strcmp(cards1[i], current_goal) == 0)
        {
            card1_found = true;
            break;
        }
        if (strcmp(cards2[i], current_goal) == 0)
        {
            card2_found = true;
            break;
        }
        
        // card 2에 카드 존재하는지 찾기
        for(size_t k = 0; k < cards2_len; ++k)
        {
            printf("card2[k]: %s\n",cards2[k]);
            printf("card2_found: %d\n", card2_found);
            
            if (strcmp(cards2[k], current_goal) == 0)
            {
                card2_found = true;
                break;
            }
        }
        
        if (!card1_found && !card2_found)
        {
            strcat(answer, "No");
            return answer;
        }
    }
    
    strcat(answer, "Yes");
    return answer;
}

 

개선점

 

맨 앞에 있는 카드를 번갈아가면서 순서 확인 해야한다는 것을 망각하고 있었다. 코딩 문제를 풀 때는 항상 문제 조건을 생각할 것.

+ strcpy를 사용하여 편하게 복사. 굳이 문자열 종료 문자를 넣어주지 않아도 되므로 편리 

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

// cards1_len은 배열 cards1의 길이입니다.
// cards2_len은 배열 cards2의 길이입니다.
// goal_len은 배열 goal의 길이입니다.
// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
char* solution(const char* cards1[], size_t cards1_len, const char* cards2[], size_t cards2_len, const char* goal[], size_t goal_len) {
    // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
    char* answer = (char*)malloc(4 * sizeof(char));
    
    // cards1, cards2의 맨 앞 카드를 가리킬 인덱스
    size_t cards1_index = 0;
    size_t cards2_index = 0;
    
    for (size_t i = 0; i < goal_len; ++i)
    {
        // 맨 앞자리가 goal과 일치하는지 확인하며 전진
        if (cards1_index < cards1_len && strcmp(cards1[cards1_index], goal[i]) == 0)
        {
            cards1_index++;
        }
        else if (cards2_index < cards2_len && strcmp(cards2[cards2_index], goal[i]) == 0)
        {
            cards2_index++;
        }
        else // 두 카드 뭉치의 맨 앞 카드 모두와 일치하지 않음
        {
            strcpy(answer, "No");
            return answer;
        }
        
    }    
    
    strcpy(answer, "Yes");
    return answer;
}

'Unreal5 공부 > TIL' 카테고리의 다른 글

2026/06/17 TIL  (0) 2026.06.17
2026/06/16 TIL  (0) 2026.06.16
2026/06/11 TIL  (0) 2026.06.11
2026/06/10 TIL  (0) 2026.06.10
2026/06/05 TIL  (0) 2026.06.05

+ Recent posts