본문 바로가기

UNSEEN7

UNSEEN 5. 게임 알고리즘 (2): FSM, BT 해당 글은 UNSEEN 2기 코딩 테스트를 대비하여 정리 목적으로 적은 글입니다. 잘못된 부분이 있다면 지적해 주시면 감사하겠습니다. 3. FSM FSM(Finite-state machine), 우리말로 유한 상태 머신은 상태(state)를 기반으로 동작을 제어하는 방식 중 하나이다. 일반적으로 게임 AI를 구현하기 위해 사용된다. 유한한 개수의 상태를 가질 수 있는 오토마타이다. FSM은 한 번에 오로지 하나의 상태만을 가지며, 현재 상태에서 어떠한 사건(Event)이 발생하면 다른 상태로 전이된다. 게임으로 비유하면 이렇다. 몬스터가 Idle, Run, Attack라는 상태를 가질 수 있다. 단, 몬스터는 한 번에 하나의 상태만을 갖는다. 달리면서 공격할 수는 없다. 몬스터는 플레이어를 발견하면 Ru.. 2024. 1. 30.
UNSEEN 5. 게임 알고리즘 (1): A*, 쿼드트리 해당 글은 UNSEEN 2기 코딩 테스트를 대비하여 정리 목적으로 적은 글입니다. 잘못된 부분이 있다면 지적해 주시면 감사하겠습니다. 게임에서 많이 사용되는 알고리즘을 간단하게 개념 위주로 정리해 보자. 자세한 구현은 한 글에서 다룰 내용은 아닌 것 같아서 개요만 정리했다. 이번 글에서는 A*와 쿼드트리를 다룰 예정이다. 1. A* A* 알고리즘? 최단 경로를 구하는 알고리즘을 꼽으라면 가장 대표적인 것이 다익스트라(Dijkstra) 알고리즘이다. 하지만 그래프 탐색의 특성상 시간 복잡도가 크기 때문에, 실생활이나 게임에서는 이를 확장시킨 A* 알고리즘을 많이 사용한다. A* 알고리즘은 주어진 출발 지점에서 목표 지점까지 가는 최단 경로를 찾아내는 그래프 탐색 알고리즘 중 하나이다. 하나의 시작 노드에서.. 2024. 1. 30.
UNSEEN 대비 4. C++ 주요 컨테이너 (2) (map, unordered_map) 해당 글은 다음 UNSEEN 대비 4. C++ 주요 컨테이너 (1) (array, vector, list) (tistory.com)에서 다루지 않은 나머지 컨테이너를 다루는 글입니다. 5. 맵(map) 맵(std::map)은 키(Key)와 값(value)의 쌍들을 저장하는 이진탐색트리 기반의 컨테이너이다. 이때, 키는 중복될 수 없다. 맵의 각 원소는 std::pair로 저장된다. pair는 순서쌍을 가리키는데 여기서는 pair.first에 key가, pair.second에 value가 저장된다. C++에서 맵은 Key를 기준으로 자동 정렬되는데, 내부적으로는 레드블랙트리로 구현된다. 맵 생성 맵을 생성하는 대표적인 방법에는 map 로 빈 맵을 생성하거나 map(const map& x)로 기존 맵을 복사.. 2024. 1. 28.
UNSEEN 대비 4. C++ 주요 컨테이너 (1) (array, vector, list) 1. C++의 주요 컨테이너 C++에서 컨테이너란 임의 타입의 객체를 보관할 수 있는 자료형을 말한다. 개발자는 필요하다면 트리, 그래프, 연결리스트 등 원하는 스펙으로 자료구조를 구현해야 한다. 하지만 C++에서는 표준 템플릿 라이브러리(STL, Standard Template Library)에서 다양한 컨테이너를 제공하고 있기 때문에 보통 STL 컨테이너로 빠르게 원하는 기능을 구현할 수 있다. C++의 표준 템플릿 라이브러리에는 array, vector, list, map, unordered_map 등의 컨테이너가 있다. 이번 글에서는 기본적인 컨테이너 중에 대해 개요와 동작 원리를 알아보자. 2. 배열(std::array) 정의 // 헤더파일 의 선언 template struct array; st.. 2024. 1. 28.
UNSEEN 대비 3. 메모리 영역 해당 글은 UNSEEN 2기 코딩 테스트를 대비하여 정리 목적으로 적은 글입니다. 잘못된 부분이 있다면 지적해 주시면 감사하겠습니다. 3. 메모리 영역 메모리의 구조 프로그램이 실행되려면 먼저 프로그램을 메모리에 로드해야 한다. 프로그램 코드가 담고 있는 명령어와 프로그램 내에서 사용될 변수 등을 위해서 메모리가 필요하기 때문이다. 이때, 프로그램이 메모리에 탑재되어 실제로 실행되고 있는 것을 가리켜 프로세스라 부른다. 컴퓨터의 운영체제는 프로그램 실행을 위해 다양한 메모리 공간을 제공한다. 프로그램이 운영체제로부터 할당받는 메모리 공간은 대표적으로 4가지로 분류할 수 있다. 코드(code) 영역 메모리에 실행할 프로그램의 코드가 저장되는데 이를 메모리에서 코드 영역이라 부른다. 텍스트 영역이라고도 부른.. 2024. 1. 25.
UNSEEN 대비 2. C++ 언어의 특징 - 해당 글은 UNSEEN 2기 코딩 테스트를 대비하여 정리 목적으로 적은 글입니다. 잘못된 부분이 있다면 지적해주시면 감사하겠습니다. 1. 설계 주요 목표 C언어와의 호환성: 기존 C언어 코드를 그대로 사용할 수 있도록 C언어의 문법을 그대로 가져온다. 객체지향: 소프트웨어를 재사용하여 생산성을 높이기 위해 객제지향 개념을 도입 타입 체크: 타입 체크를 엄격히 하여 실행 시간 오류의 가능성을 줄이고 디버깅을 도움 효율성 저하 최소화: 성능에 영향을 주지 않는 선에서 기능을 추가한다. 예를 들어 함수의 인라인을 통해 함수 호출로 인한 시간을 최소화한다. 2. C++의 특징 C에서 C++로 오면서 많은 특징이 추가되었다. 가장 대표적인 것은 객체지향 프로그래밍이 가능해진 점이고, 그 이외에도 bool 자료.. 2024. 1. 25.
UNSEEN 대비 1. 객체지향 프로그래밍의 특징 - 해당 글은 UNSEEN 2기 코딩 테스트를 대비하여 정리 목적으로 적은 글입니다. 잘못된 부분이 있다면 지적해주시면 감사하겠습니다. 1. 객체지향 프로그래밍의 특징 객체지향 프로그래밍이란? 객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 객체들의 모임으로 파악하고자 하는 것을 말한다. 자동차를 만들 때 작은 부품을 먼저 만들고, 이렇게 만든 부품을 하듯이, 객체지향적으로 프로그램을 설계한다는 말의 의미는 객체를 만들고 이를 조립해서 하나의 거대한 프로그램을 만든다는 뜻이다. C언어 이후, 많은 객체지향 언어가 나타났는데 대표적인 것이 Objective-C, C++, Java, C#.. 2024. 1. 23.