오늘 학습 내용
C++
2-5. 효율적인 코드 구현하기
동작은 비슷해 보이지만 성능 차이가 심해 시간 복잡도에 영향 미치는 케이스 정리
벡터 VS 덱
벡터는 사용하는 관점에서는 둘다 임의 접근이 가능한 컨테이너
하지만 둘의 내부 완전히 다름
벡터의 메모리 전략
벡터는 배열과 동일하게 메모리가 연속적으로 할당
별다른 조치 없이 임의 접근 가능
덱의 메모리 전략
덱은 맨 앞의 원소와 맨 뒤의 원소를 가리키는 포인터 존재, 내부적으로 데이터는 여러 개의 청크라는 영역으로 쪼개짐
이는 임의 접근을 효율적으로 하기 위한 전략
맨 앞의 원소를 (추가)삭제하는 경우
벡터의 경우 맨 앞의 원소 삭제하는 경우 뒤에 원소 전부 이동 필요
O(N) 연산 필요
vec.insert(vec.begin(), i) //원소 앞에 삽입하는 경우
덱은 청크로 나뉘어져 있어서 영향 덜 받음
O(1) 연산 필요
deq.push_front(i) 원소 앞에 삽입하는 경우
임의 접근을 하는 경우
벡터와 덱 모두 점근적 상한 기준 O(1)
덱의 경우 맵을 통해 청크 위치 찾은 후 찾는 연산이 추가적으로 필요해서
벡터보다는 느림
정렬이 필요없는데 정렬하는 경우
원소가 삽입할 때마다 자동 정렬 컨테이너 존재
컨테이너의 내부 정렬
STL 제공 컨테이너 중 내부 정렬 컨테이너는 레드-블랙-트리로 관리
Map,Set, Priority_que 가 존재(정렬)
맵, 비정렬 맵 지교
맵의 경우 원소가 N개인 상황에서 키가 삽입될 경우 정렬을 수행 O(logN) 연산 발생
삽입을 할 때마다 발생하는 연산 누적되면 시험 결과 바뀜
따라서 키값을 기준으로 정렬 필요 없다면 unordered_map 사용 고려
비정렬은 set 또는 map으로 존재
특정 원소를 찾는 경우
벡터
벡터는 선형 컨테이너
특정 데이터에 접근하기 위해서 해당 데이터의 인덱스를 통해 임의 접근해야 됨
인덱스 자체에는 데이터에 대한 특별한 정보 없어서 O(N) 걸림
set과 map
레드 블랙트리로 관리되어서 특정 원소 찾는 연산 O(logN)
unordered_set과 unordered_map
해시기반으로 관리
특정 원소 찾는 연산은 O(1)
문자열을 결합하는 경우
문자열에 문자를 추가하는 경우
+= 연산자, appned() 메서드
기존 문자열에 덧붙이는 방식 O(1)
auto & 와 auto
반복문을 사용할 때 auto로 받는 것과 auto & 로 받는 것은 생각보다 큰 성능 차이 발생
전자는 복사가 발생하지만 후자는 복사가 발생하지 않음
auto & 가 auto 보다는 빠름
auto 는 복사 발생 auto &는 복사 대신 참조로 처리
사전캠프 퀘스트
선배기수 Unreal 엔진 게임 분석
Day 1. 게임 체험 및 이슈 탐색
활동 방식
개인 플레이 및 분석
선택한 게임의 이름은 무엇인가요?
Dunstaurant
선택한 게임의 장르는 무엇인가요?
3인칭 시점의 로그라이트 스테이지 돌파형 게임
선택한 게임의 어떤 시스템에 집중하셨나요?
던전 컨텐츠 관련 시스템(미니맵, 인벤토리 창, 보물상자)
인상 깊거나 불편했던 상호작용 장면 3개 이상 공유해주세요!


- 게임 플레이 시 미니맵이 화면에 항상 활성화 되어 있지만 플레잉어의 이동 방향에 따라서 미니맵의 방향이 전환되는 기능이 존재하지 않아서 길을 헤매는 불편한 사항이 발생함

상호작용 분석
| 상호작용 사례 | 시스템 반응 | 의도/효과 분석 | 개선 포인트 |
|---|---|---|---|
| 미니맵 기능 | 플레이어가 던전에 입장 시 던전의 구조를 파악할 수 있게 던전의 방 구조를 2D로 미니맵 형태로 화면에 항상 출력 | 플레이어가 던전의 방 구조 미니맵 확인 후 방향을 찾아서 던전을 클리어하게 하려는 목적 | 플레이어의 방향과는 상관없이 항상 일정방향 고정된 형태의 미니맵으로제공되서 플레이어의 이동 방향에 따른 나침반 기능을 추가하고 미니맵 내에 동서남북 표시를 추가하는 형태로 개선 |
| 인벤토리 기능 | 플레이어가 던전 내에서 Tab 키를 누르면 인벤토리 창이 화면에 출력 | 플레이어가 현재 착용중인 아이템과 파밍한 재료 아이템들 확인할 수 있게 하려는 의도 | 인벤토리 내부에 어떤 아이템인지 마우스 포인터로 가리켰을 때 세부 정보 텍스트 메세지 창을 보여주는 형태로 아이템 자세한 정보를 확인 할 수 있게 개선 |
| 보물 상자 획득 기능 | 상자 E키로 열고 상자 내부에 아이템 생성 → 플레이어가 일정 범위 내 접근 해야 아이이템 정보 및 획득 키 안내 텍스트 출력 | 상자에 가까이 접근 했을 때 아이템 정보 확인하고 획득하고 싶은 아이템은 먹을 수 있게 자동 획득이 아닌 플레이어의 선택에 따라서 획득할 수 있게 한 의도 | 현재는 아이템의 이름만 뜨는 부분이 있어서 가까이 접근했을 때 아이템 이름과 함께 아이템의 효과가 작성된 작은 메세지 창이 떠서 효과 학인하고 먹을 수 있게 수정 |
게임의 핵심 시스템이 동작하는 구조의 시작부터 과정을 최대한 자세하게 분석, 나열해주세요!
게임의 구조
사용자가 거점에서 최초 무기 아이템 선택 → 던전 입장 → 던전 내부의 보물 상자와 제단에서 상위 아이템, 특정 효과 아이템 획득을 통해서 플레이어 성장 → 던전 내부 몬스터 처리 → 재료 파밍
해당 단계 반복적으로 4단계 던전까지 클리어 혹은 원하는 아이템 파밍 했을 경우 중도 거점 복귀
거점 복귀 후 획득한 재료 아이템으로 타이쿤 요리 판매 시작 → 타이쿤 형태로 식당 내부 인테리어(화구, 테이블 등) 기능 → 쉐프, 서빙 과 같은 NPC 고용으로 요리 판매 시스템 자동화 → 요리 판매를 통해서 골드 수급
직접 분석해본 내용 중 가장 핵심이 되는 구성 요소는 무엇이라 생각하나요?
게임 시스템을 전체적으로 분석했을 때, 핵심이 되는 구성 요소는 ‘식당 운영을 통한 골드 수급 구조’와 이를 가능하게 하는 ‘던전 파밍 기반 성장 구조’라고 볼 수 있습니다.
첫째, 게임의 최종 목표는 식당 운영을 통해 안정적으로 골드를 확보하는 것입니다. 식당 운영을 위해서는 지속적인 재료 공급이 필수적이며, 이 재료는 던전 파밍을 통해 획득됩니다. 따라서 식당 시스템은 최종 결과물, 던전 파밍 시스템은 이를 가능하게 하는 핵심 동력이 됩니다.
둘째, 던전 파밍 과정에서 효율적으로 재료를 획득하려면 플레이어의 전투 능력을 지속적으로 강화할 필요가 있습니다. 이때 등장하는 무기 상자, 유물 상자, 회복 제단, 데미지 증가 제단 등은 플레이어 성장을 촉진하여 던전 진행 속도와 생존력을 높입니다. 따라서 이러한 성장 요소들은 던전 파밍의 효율성을 결정짓는 핵심 구성 요소입니다.
종합하면, 게임의 중심 구조는 식당 운영 → 재료 필요 → 던전 파밍 → 플레이어 성장 → 효율적 파밍 → 다시 식당 운영으로 이어지는 선순환 구조이며, 그중에서도 던전 파밍과 이를 뒷받침하는 성장 요소들이 가장 핵심적인 시스템적 역할을 수행합니다
7.활동 후 느낀 점
게임 내 대부분의 요소가 잘 구현되어 있더라도, 일부 요소에서 사용자 경험 측면의 불편함이 발생하면 전체적인 게임 몰입도가 쉽게 깨질 수 있다는 점을 분석을 통해 확인할 수 있었다. 또한 게임을 개발할 때 전체적인 구조를 촘촘하고 일관성 있게 설계해야 플레이 과정에서 사용자가 지루함을 느끼는 빈도와 시점을 효과적으로 조절할 수 있을 것이라고 생각한다.