260326 TIL - 챕터4 멀티플레이어 게임개발 14일차

2026. 3. 26. 23:52언리얼 7기 본캠프

//빛의 경로 사이클 문제. 삼차원 벡터라는 해괴한(?) 벡터를 사용해야 했는데값을 정리하는게 생각보다 어려웠음
//중간에 재귀함수로 답을 적었다가 While로 순회했는데 케이스에 따라 재귀가 심하게 쌓여 스택 오버플로우가
//날 수 있다고 생각해서였음. 개인적으로는 재귀가 조금 더 직관적이었는데 비슷한 문제가 더 나오면
//케이스를 비교해볼 수 있을듯
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> dx = {0, 1, 0, -1};
vector<int> dy = {-1, 0, 1, 0};

vector<int> solution(vector<string> grid) {
    vector<int> answer;
    int row = grid.size();
    int column = grid[0].length();
    vector<vector<vector<bool>>> isvisited(row, vector<vector<bool>>(column, vector<bool>(4)));
    for(int r = 0; r < row; r++)
    {
        for(int c = 0; c < column; c++)
        {
            for(int w = 0; w < 4; w++)
            {
                if (isvisited[r][c][w]) continue;
                int length = 0;
                int currentrow = r;
                int currentcol = c;
                int currentway = w;
                while(true)
                {
                    if (isvisited[currentrow][currentcol][currentway])
                    {
                        answer.push_back(length);
                        break;
                    }
                    isvisited[currentrow][currentcol][currentway] = true;
                    
                    switch(grid[currentrow][currentcol]){
                        case 'S':
                            currentway = currentway;
                            break;
                        case 'L':
                            currentway = (currentway - 1 + 4) % 4;
                            break;
                        case 'R':
                            currentway = (currentway + 1) % 4;
                            break;
                    };
    
                    currentrow = (currentrow + dy[currentway] + row) % row;
                    currentcol = (currentcol + dx[currentway] + column) % column;
                    length++;
                }
            }
        }
    }
    sort(answer.begin(), answer.end());
    return answer;
}

 

cs면접 문제 복기

 

C++의 TMP에 대해서, 장점과 단점

 

TMP는 Template Meta Programming의 약자이며, 템플릿을 이용해 컴파일 타임에 타입 결정, 조건 분기, 계산 등을 수행하는 기법임
장점은 런타임 비용 감소, 타입 안정성, zero-cost abstraction에 가깝게 설계할 수 있다는 점임
단점은 코드 가독성 저하, 긴 컴파일 시간, 난해한 에러 메시지, 코드 부풀기 문제가 있다는 점임
즉 TMP는 강력하지만, 복잡성과 유지보수 비용도 큰 도구라고 볼 수 있음

 

 

C++에서 매크로 함수의 작동방식, 인라인 함수와의 차이와 장단점

 

매크로는 전처리 단계에서 소스코드를 문자 치환하는 방식이라 타입 검사와 스코프가 없고, 부작용 위험이 있음
인라인 함수는 실제 함수이므로 타입 검사, 스코프, 디버깅이 가능하고 더 안전함
매크로는 조건부 컴파일이나 로그/토큰 처리 같은 전처리기 기능에 유리함
일반적인 함수 대체 용도라면 보통 매크로보다 인라인 함수가 더 적절함

 

 

C++의 new / delete와 C의 malloc/free중 오버로딩이 되는것과 안되는것

 

C++의 new / delete는 연산자이기 때문에 operator new / delete 형태로 오버로딩할 수 있음
반면 malloc / free는 C 라이브러리의 일반 함수이므로 오버로딩할 수 없음

또 new / delete는 생성자와 소멸자 호출까지 포함하지만, malloc / free는 단순 메모리 할당과 해제만 수행함
즉 오버로딩 가능 여부와 객체 생명주기 관리 여부가 큰 차이임