TIL(53)

이채원·2026년 9월 4일

TIL

목록 보기
54/77

오늘의 할일
1. 코드카타 정리
2. 팀프로젝트 정리
3. 다음 학습 목표


코드카타 정리

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.

제한 조건
strings는 길이 1 이상, 50이하인 배열입니다.
strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
모든 strings의 원소의 길이는 n보다 큽니다.
인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<string> solution(vector<string> strings, int n) {
    vector<string> answer;

    // 모든 단어의 맨 앞에 n번째 글자 붙이기
    for (int i = 0; i < strings.size(); i++) {
        strings[i] = strings[i][n] + strings[i];
    }

    // 사전순으로 단어 기본 정렬
    sort(strings.begin(), strings.end());

    // 맨 앞에 붙였던 글자를 다시 떼어내기
    for (int i = 0; i < strings.size(); i++) {
        // 1번 인덱스부터 끝까지만 남기고 잘라내기
        answer.push_back(strings[i].substr(1));
    }

    return answer;
}

AI가 작성한 코드

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<string> solution(vector<string> strings, int n) {
    // 람다 함수를 활용하여 정렬 규칙을 직접 정의
    sort(strings.begin(), strings.end(), [n](const string& a, const string& b) {
        // 1순위: n번째 글자가 서로 다르다면, 그 글자를 기준으로 오름차순 정렬
        if (a[n] != b[n]) {
            return a[n] < b[n];
        }
        // 2순위: n번째 글자가 같다면, 단어 전체를 사전순으로 정렬
        return a < b;
    });

    return strings;
}

A와 B를 비교할 건데, 먼저 n번째 글자를 비교해 보고, 같으면 전체를 비교해 줘


팀프로젝트 정리

에셋 공유하는 방법 실습해보기

팀 프로젝트를 위해
팹(Fab) ➔ 구글 드라이브 ➔ 언리얼 엔진 ➔ 깃허브 데스크톱

깃허브는 용량제한(LFS)이 빡세서 무거운 원본 에셋은 구글 드라이브에 모으고, 언리얼 엔진에서 처리된 .uasset 파일만 깃허브로 올리는 방식이 가장 안전함

미리 초대된 레포지토리 보유중인 상태

사전 필수 세팅

시작 전에 레포지토리 폴더 안에 언리얼 엔진 전용 .gitignore 파일이 꼭 있어야 함. 안 그러면 Saved, Intermediate 같은 불필요한 찌꺼기 파일까지 수십 기가가 업로드됨. 추가로 대용량 파일을 위한 Git LFS도 세팅되어 있어야 함.

Step 1. 에픽게임즈(Fab)에서 에셋 다운로드

메인 프로젝트에 바로 다운로드하는 건 비추. 파일이 꼬이거나 불필요한 더미 파일이 섞여 들어갈 수 있음.

  1. 언리얼 엔진을 켜서 아무것도 없는 '빈 임시 프로젝트(예: Asset_Test)'를 하나 만듦
  2. 에픽게임즈 런처나 팹(Fab) 웹사이트에서 원하는 에셋을 찾음
  3. 에셋을 다운로드할 때 '프로젝트에 추가'를 눌러 방금 만든 '빈 임시 프로젝트'에 에셋을 집어넣음
  4. 만약 플러그인 형태나 팹에서 직접 받은 3D 원본 파일(FBX, OBJ 등)이라면 바탕화면 등 알아보기 쉬운 폴더에 다운로드

Step 2. 폴더 정리 및 .zip 파일로 압축하기

여기서 절대 구글 드라이브로 바로 올리면 안 됨! 파일 유실을 막기 위해 묶어주는 과정

  1. 내 컴퓨터의 파일 탐색기를 열고, 방금 에셋을 받은 '임시 프로젝트' 폴더 안의 Content 폴더로 들어감
  2. 팹에서 받은 에셋 폴더를 찾음
  3. 해당 폴더를 우클릭해서 반드시 .zip 형식으로 압축. (.zip 사용)
  4. 파일명은 팀원들이 알아보기 쉽게 적어줌. (예: Monster.zip)
  5. 3D 원본 파일(FBX 등)을 모아둔 바탕화면 폴더도 똑같이 .zip으로 압축.

Step 3. 구글 드라이브에 에셋 공유 (압축 파일 업로드)

  1. 팀 공용 구글 드라이브의 에셋 보관용 폴더로 들어감.
  2. 방금 압축한 .zip 파일들만 구글 드라이브에 업로드.
  3. 이렇게 하면 단일 파일이라 업로드도 순식간에 끝나고, 파일 누락 위험이 0%가 됨.

Step 4. [깃 마스터] 에셋 취합 및 통합 테스트

  1. 깃 마스터는 구글 드라이브에 올라온 팀원들의 .zip 에셋 파일들을 전부 내 컴퓨터로 다운로드.
  2. 압축을 풀고, 깃 마스터가 관리하는 '메인 프로젝트'로 에셋들을 Migrate시킴.
  3. 메인 프로젝트(언리얼 엔진)를 켜서 맵에 무기나 이펙트를 직접 배치해 봄.
  4. Material이 깨진 건 없는지, 스케일은 적당한지, 폴더 정리는 잘 되었는지 다 점검.
  5. 이상이 없다면 맵을 저장하고, [모두 저장(Save All)]을 누른 뒤 언리얼 엔진을 완전히 종료. (엔진을 켜둔 채로 압축하면 파일이 꼬임).

Step 5. [깃 마스터] 프로젝트 통파일 압축 및 배포

  1. 깃 마스터의 컴퓨터에서 메인 프로젝트 폴더로 들어감.
  2. 압축하기 전에 프로젝트 폴더 안에 있는 Saved, Intermediate, DerivedDataCache 이 3개 폴더는 삭제.
    (내 컴퓨터의 임시 캐시 파일이라 남이 받으면 오류만 나고, 지워도 엔진 켜면 알아서 복구됨. 안 지우면 용량이 50GB인데, 지우면 2GB로 줄어드는 것을 볼 수 있음).
  3. 메인 프로젝트 폴더를 통째로 .zip 파일로 압축함. (예: ZombieProject.zip)
  4. 구글 드라이브의 [프로젝트 통파일] 폴더를 만들어서 이 압축 파일을 업로드함.
  5. 깃 마스터는 본인의 깃허브 데스크톱을 켜서 현재 상태를 Initial Commit 등으로 깃허브 서버에 Push 해둠.

Step 6. [팀원] 통파일 다운로드 및 깃허브 연동 세팅

  1. 팀원들은 구글 드라이브에 올라온 ZombieProject.zip을 다운로드.
  2. 각자 본인 컴퓨터의 작업용 드라이브(예: D:\UnrealProjects)에 압축을 풂.
  3. 언리얼 엔진을 켜서 해당 프로젝트를 열어봄. (처음 열 때는 셰이더 컴파일 때문에 로딩이 좀 걸리지만, 깃 마스터가 세팅한 맵과 에셋이 잘 뜰 것).
  4. 깃허브 데스크톱 연동: 팀원들은 깃허브 데스크톱을 엶
  5. 상단 메뉴에서 [File] ➔ [Add local repository...]를 클릭
  6. 방금 구글 드라이브에서 다운받아 압축을 푼 그 메인 프로젝트 폴더를 경로로 지정
  7. 깃허브 데스크톱이 깃허브에 있는 레포지토리랑 똑같은 거라고 인식해서 연동을 완료

요약 및 이후 작업 방식:

  • 최초 1회 구축 (위에서 한 작업):
    팀원 에셋 zip 업로드 ➔ 깃 마스터가 받아서 통합 및 맵 배치 ➔ 캐시 파일 지우고 통째로 zip 압축 ➔ 구글 드라이브에 업로드 ➔ 팀원들이 다운받아서 로컬 레포지토리로 연결
  • 그 이후 개발 진행: 작업한 내용(블루프린트 수정, 총알 이펙트 추가 등)은 깃허브 데스크톱에서 Commit ➔ Push만 하면 되고, 다른 사람들은 Pull만 누르면 변경된 파일만 동기화

다음 학습 목표

게임 스토리 완성 후 에셋 확정

profile
초보 개발자

0개의 댓글