내일배움캠프 언리얼트랙 31일차 - 과제03

2026. 6. 5. 08:39·내일배움캠프

수강 강의

C++와 Unreal Engine으로 3D 게임 개발

범위 : 1-1 ~ 1-7


강의 1-2

 

Solution Explorer

visual studio는 실제 폴더 구조와 별개로 논리적 가상 폴더 구조를 생성해서 표시함.

즉, 탐색기의 실제 폴더 구조와 1대1 대응되지 않을 수 있음. 단, 실제로는 전부 존재하고 있다.

 

솔루션 구조 내 주요 폴더

Engine 언리얼 엔진 자체 소스 코드와 리소스가 담긴 곳
Games 우리가 만든 프로젝트 코드가 모두 들어있는 곳
Source, Config, .uproject 파일들이 있음
프로젝트 루트 폴더
게임 개발에 필요한 모든 리소스와 설정파일이 
이곳에 모여있음!
Programs 엔진 동작에 필요한 유틸리티 프로그램이나 서버 모듈이 담겨있는 곳
Rules 엔진과 게임 등 각 모듈의 빌드 규칙을 정의해놓은 파일들이 담겨있는 곳
모듈 의존성, 플러그인 활성화 여부, 빌드 대상 등을 제어
Visualizers Visual studio 디버거에서 언리얼 엔진의 복잡한 자료구조를 보다 읽기 쉽게 시각화할 수 있도록 돕는 설정 파일들이 담겨있는 

 

프로젝트 루트 폴더 주요 구성 요소

Config .ini파일을 통해 에디터와 게임의 초기 상태를 지정
Source 실제 C++ 소스코드가 들어있음 빌드 설정 관련 주요 파일 포함됨
.uproject 언리얼 에디터에서 이 파일을 열면 프로젝트를 직접 실행 가능

 

빌드 설정

컴파일+링크 -> DLL

생성된 DLL은 언리얼 에디터 실행될 때 자동으로 로드됨. 이를 통해 수정된 게임 로직이 에디터와 게임에서 즉시 반영됨.

 

빌드 구성 및 플랫폼

빌드 구성 설명 주 사용 목적
DebugGame 게임 코드만 디버그 정보 포함, 엔진은 최적화 상태로 빌드 독립 실행 환경에서 게임 로직 디버깅
DebugGame Editor 게임 코드만 디버그 정보 포함, 언리얼 에디터와 함께 실행 에디터에서 C++ 게임 코드 디버깅
Development 최적화 적용, 디버깅 정보 일부 유지 독립 실행 환경에서 기능 및 성능 테스트
Development Editor 최적화 적용, 에디터 실행 가능 일반적인 언리얼 개발 작업(가장 많이 사용)
Shipping 최대 최적화, 디버그 기능 제거 최종 배포(출시)용 빌드
Configuration Manager... 빌드 구성이 아닌 Visual Studio 설정 창 빌드 대상, 플랫폼, 구성 관리

 

구성 에디터 실행 디버깅 최적화
DebugGame ❌ ★★★★★ ★☆☆☆☆
DebugGame Editor ✅ ★★★★★ ★☆☆☆☆
Development ❌ ★★★☆☆ ★★★★☆
Development Editor ✅ ★★★☆☆ ★★★★☆
Shipping ❌ ☆☆☆☆☆ ★★★★★

 

 

강의 1-3

Migrate

하나의 프로젝트에 있는 에셋과 그 에셋에 연결된 모든 종속 파일들을 누락없이 다른 프로젝트로 안전하게 복사하여 옮기는 기능.

 

옮기고자 하는 폴더를 우클릭하면 해당 창이 뜨고, Migrate를 선택한다. 이후 뜨는 팝업 창에서 OK버튼을 누르면 된다.

 

레벨 생성 및 기본 맵 설정

File - New Level - Basic

Basic 레벨은 바닥, 조명, 스카이 박스 등 필수 요소만 있어 가볍고 빠르게 로드된다.

 

Edit - Project Settings - Maps & Modes

Editor Startup Map과 Game Default Map을 방금 만든 레벨로 지정하면 에디터나 게임을 실행했을 때 자동으로 지정한 레벨이 열리게 된다.

 

Actor와 Object

Object - 언리얼 엔진에서 모든 클래스의 최상위 부모 클래스. 레벨에 배치 불가능. 주로 데이터, 로직 담당.

 

Actor - Object를 상속한 클래스로, 레벨에 배치 가능. 위치, 회전, 크기 등 공간적 정보를 가짐. 여러 컴포넌트를 추가로 붙일 수 있음. 실제 게임에서 보이고 상호작용하는 캐릭터, 적, 무기, 조명 등이 actor를 기반으로 제작됨.

 

 

Tools - New C++ Class - Actor

새로운 액터 클래스 생성.

 

Class Type

Public - .h가 Public 폴더에, .cpp가 Private 폴더에 생긴다. 프로젝트의 다른 모듈에서 쉽게 #include할 수 있어서 편리.

Private - .h 와 .cpp 모두 Private 폴더에 저장됨. 해당 모듈에서만 접근 가능하며 특정 로직이나 구현을 캡슐화해서 외부에 노출하고 싶지 않을 때 사용.


코드카타

K번째수


[문제설명]

배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 한다.

 

 

배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어진다.

 

[제한사항]

- array의 길이는 1 이상 100 이하

- array의 각 원소는 1 이상 100 이하

- commands의 길이는 1 이상 50 이하

- commands의 각 원소는 길이가 3이다.


일단, 주어지는것은 배열 array와 i, j, k를 원소로 가지느 2차원 배열 commands.

귀찮군뇨

 

일단...i번째부터 j번째까지 array를 자르고 정렬한 다음 k번째값을 가져오는 과정을 순차적으로 진행해야한다.

 

먼저배열을 자르는 과정에서 속으면 안되는게 i, j 값대로 자르면 안된다는 것이다. 인덱스로는 i-1, j-1이기 때문이다.

vector<int> step1(array.begin() + (i-1), array.begin() + j);

이렇게 배열의 i-1번째 인덱스부터 j번째 인덱스 직전까지 복사한다.

 

이제 이렇게 잘라낸 새 배열을 오름차순으로 정렬해야한다. 정렬은 <algorithm>의 sort함수를 사용해서 아주 간단하게 정렬한다.

sort(step1.begin(), step1.end());

 

이렇게 i번째부터, j번째까지 자르고 오름차순으로 정렬까지 했다. 이제 k번째 값을 가져오면된다. 이것도 i, j처럼 k-1번재 원소이다.

해당하는 값을 answer에 추가하면 된다.

answer.push_back(step1[k-1]);

자 필요한 기능은 전부 준비됐으니 for문으로 돌면서 i, j, k값을 꺼내오자.

for(int a=0; a<commands.size(); a++)
{
    int i = commands[a][0];
    int j = commands[a][1];
    int k = commands[a][2];
    
    ...
}

 

이제 구현했던 기능들을 반복문 안에 넣으면 완성!

for(int a=0; a<commands.size(); a++)
{
    int i = commands[a][0];
    int j = commands[a][1];
    int k = commands[a][2];
    
    vector<int> step1(array.begin() + (i-1), array.begin() + j);
    sort(step1.begin(), step1.end());
    answer.push_back(step1[k-1]);
}

 

 

헤더까지 포함해서 전체코드는 이렇게된다.

#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(vector<int> array, vector<vector<int>> commands) {
    vector<int> answer;
    for(int a=0; a<commands.size(); a++)
    {
        int i = commands[a][0];
        int j = commands[a][1];
        int k = commands[a][2];
    
        vector<int> step1(array.begin() + (i-1), array.begin() + j);
        sort(step1.begin(), step1.end());
        answer.push_back(step1[k-1]);
    }
    return answer;
}

 

'내일배움캠프' 카테고리의 다른 글

내일배움캠프 언리얼트랙 33일차  (0) 2026.06.10
내일배움캠프 언리얼트랙 32일차 - 과제 03  (0) 2026.06.09
내일배움캠프 언리얼트랙 30일차 - 과제03 발제  (0) 2026.06.04
내일배움캠프 언리얼트랙 29일차 - 커리어데이(2) + 블렌더  (0) 2026.06.02
내일배움캠프 언리얼트랙 26일차 - 팀프로젝트(5) (완료)  (0) 2026.05.28
'내일배움캠프' 카테고리의 다른 글
  • 내일배움캠프 언리얼트랙 33일차
  • 내일배움캠프 언리얼트랙 32일차 - 과제 03
  • 내일배움캠프 언리얼트랙 30일차 - 과제03 발제
  • 내일배움캠프 언리얼트랙 29일차 - 커리어데이(2) + 블렌더
thinklikethink
thinklikethink
생각처럼 개발 공부 블로그입니다.
  • thinklikethink
    생각처럼
    thinklikethink
  • 전체
    오늘
    어제
    • 분류 전체보기 (53)
      • 사전캠프 (13)
      • 내일배움캠프 (40)
  • 블로그 메뉴

    • 홈
    • 내일배움캠프
    • 사전캠프
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
thinklikethink
내일배움캠프 언리얼트랙 31일차 - 과제03
상단으로

티스토리툴바