전체 글 96

선형 리스트(Lenear List) 개요

선형구조 - 스택 * 스택 자료구조에 먼저 저장된 것이 꺼내어 쓸 때는 제일 나중에 나옴 * 반대로 가장 최근에 저장된 것이 꺼내어 쓸 때는 제일 먼저 나옴 * 만약 자료들의 나열 순서를 바꾸고 싶다면 스택에 집어 넣었다가 꺼내면 역순으로 바뀜 - 큐 * 스택과 반대로 큐 자료 구조에 먼저 저장된 것이 제일 먼저 나옴 * 가장 나중에 저장된 것이 꺼내어 쓸 때는 가장 나중에 나옴 - 환형 큐 * 한정된 길이 안에서 부수적인 작업 없이 읽고 쓰기를 할 수 있는 큐임 * 원형으로 구성된 큐 - 덱 * 양쪽에서 넣기와 빼기를 할 수 있는 일반화된 선형 구조임 비선형구조 - 그래프 * 꼭지점과 꼬지점을 잇는 변으로 구성됨 - 유향/무향 그래프 * 변이 방향성을 갖는지 갖지 않는지에 따른 그래프의 분류임 - 트리..

알고리즘 분석

시간 복잡도 - 알고리즘이 시간적으로 얼마나 효율적인지를 나타내어 주는 지표 - 데이터 양에 따른 처리 시간 증가가 완만할 수록 알고리즘 효율이 좋음 1. 알고리즘 - 알고리즘이란? * 추상적, 개략적으로 기술한 조리법 * 알고리즘을 구체적으로 표현한 것이 프로그램 - 사세성 * 기본 동작을 언급하되 너무 추상적이거나 구체적이어서는 안됨 - 정확성 * 허용된 입력에 대해서 제대로 동작해야 함 * '정확히 우리가 기대하는 것'을 수행해야 함 2. 프로그램 오류 - 문법적 오류 * 명령문 끝에 세미콜론 * 프로그래머와 컴퓨터 간에 정확한 의사소통 * 모호성(Ambiguity)을 배제하기 위한 약속 - 의미 상의 오류 * 프로그래머와 컴파일러 사이의 오해 * 연산자의 오사용 등 - 논리적인 오류 * 문법은 맞..

자료구조와 알고리즘

* 자료구조와 알고리즘의 관계는 의존적 메모리 할당 1. 메모리 할당의 개념 - 기본적 예제 연속적(Contiguous) : 배열 연결적(Linked) : 연결 리스트 2. 연속적 할당 - 하나의 배열로서 단일 연속적인 메모리 공간에 n객체가 저장됨 - 더 많은 메모리가 필요할 때에는 새로 메모리 공간을 요구하고 할당 받고, 이전 메모리의 모든 정보를 새 메모리에 복사해야 함. - 일반적으로 OS에게 추가로 연속된 n객체의 공간할당을 받을 수 없음 ex) ABCD 3. 연결적 할당 - 두 데이터를 연결적으로 저장할 수 있도록 할당 - 객체 자기 자신 그리고 자신과 연결되어 있는 다음 아이템에 대한 참조로 구성 - C++ 객체에서의 노드란 다음 노드의 주소(Pointer)를 지칭함 ex) A→B→C→D -..

이론적 배경

※ 4명의 플레이어라는 가정 - 4개의 게임 세상이 존재(컴퓨터 1대 당 1세상 존재) A가 로컬 플레이어라면 나머지 B, C, D,는 리모트 플레이어 B가 로컬 플레이어라면 나머지 A, C, D,는 리모트 플레이어 ... - 로컬 플레이어는 다른 플레이어들에게 정보를 공유하는 방식(동기화 Sync) - 결국 동기화는 필수 요소 ※ 서버-클라이언트와 권한 분리 * 서버 - 서비스를 제공하는 컴퓨터 - 게임 세상을 마련해줌 * 클라이언트 - 서버에 찾아가서 서비스를 받는 컴퓨터 - Dedicated Server와 Host Server로 나뉨 * Host Server - 3명의 클라이언트가 존재한다면, 그 중에 하나는 Host이자 Server가 됨 - Host가 다른 클라이언트의 정보를 받아서 동기화를 관리..

추상 데이터형

컨테이너 1. 컨테이너의 개념 - 컨테이너의 정의와 기능 * 대부분의 일반적 추상형 데이터 타입(ADT: Abstract Data Type) * 객체에 접근하고 저장하는 등의 자료의 구조를 묘사함 - 처리와 연산의 정의 [ 개체(Entity)이거나 ] [ 컨테이너에 저장된 객체 ] 2. 연산 - 컨테이너의 연산 * 컨테이너의 생성 * 기존 컨테이너의 복사나 폐기 * 컨테이너 비움 * 컨테이너 내 객체의 개수 반환 * 컨테이너가 수용할 수 있는 최대 객체의 수 반환 * 두 컨테이너에서 합집합과 교집합 계산 - 컨테이너에 저장된 객체의 연산 * 객체의 삽입 * 객체의 접근 혹은 수정 * 객체의 삭제 * 컨테이너 내에 존재 유무 확인 * 컨테이너 내 객체 모두를 반복 (혹은 한번에 하나씩 한꺼번에 접근) - ..

수학적 귀납법

귀납법의 원리 Q. n≥n0인 모든 값에서 어떤 함수 F(n)이 항상 참이라는 것을 증명하라. - 풀이 방법 1. F(n0)이 참이라는 것을 보인다. 2. F(n0)이 임의의 n에 대해 F(n)이 성립한다고 가정한다. 3. 이러한 가정에서 F(n + 1)이 성립한다는 것을 보인다면 n ≥ n0에 대해 F(n)이 성립한다는 것이 증명된다. 이를 '귀납정 정리'라고 한다. - 예제 풀이 1. n = 0일 때: 0(0+1) / 2 = 0 → Base Step 2. 주어진 n에 대해: n(n+1) / 2 = 참이라고 가정 3. 위의 가정을 이용해 다음이 성립함을 보임 → Induction Step = (n+1)(n+2) / 2

자료구조를 위한 수학

기본적인 함수 1. 마루(Floor)와 천장(Ceil) 함수 - 마루 함수 어떤 실수 x 이하인 제일 큰 정수를 반환 ex) 3.2 = 3 -5.2 = -6 - 천장 함수 어떤 실수 x 이상인 제일 작은 정수를 반환 ex) 3.2 = 4 -5.2 = -5 2. 로그 함수 - f(n) = n½ = √n는 In(n)보다 항상 크다 - 로그와 지수 함수의 증가율 비교 o 지수 함수는 d > 0에서 그 어떤 비상수 다항식보다 빠르게 증가한다. o 그러므로 지수 함수의 역함수인 로그 함수는 그 어떤 다항식보다 느리게 증가한다. ex) f(n) = n½ = ²√n는 In(n)보다 항상 빠르게 증가한다. ex) f(n) = n⅓ = ³√n은 n = 93까지만 In(n)보다 느리게 증가한다. - 로그 함수의 표기, 종..

자료구조와 알고리즘의 이해

알고리즘의 개요 알고리즘의 조건 - 입력 : 0개 이상의 입력이 존재해야 한다. - 출력 : 1개 이상의 출력이 존재해야 한다. - 명백성 : 각 명령어의 의미는 모호하지 않고, 명확해야 한다. - 유한성 : 한정된 수의 단계 후에는 반드시 종료되어야 한다. cf) OS는 무한루프로 실행됨 - 유효성 : 각 명령어들은 실행 가능한 연산이어야 한다. 알고리즘의 기술 방법 - 자연어로 표기(영어, 한국어 등) o 읽기 쉬움 o 단어들을 정확하게 정의하지 않으면 의미 전달이 모호 - 흐름도(Flow Chart) o 직관적이고 이해하기 쉬운 알고리즘 기술 방법 o 그러나 복잡한 알고리즘의 경우, 상당히 복잡해짐 - 유사코드(Pseudo-code-개념적인 코드) o 알고리즘의 고수준 기술 방법 o 자연어보다는 더..

게임시스템 기획

시스템 기획 게임시스템기획은 데이터와 데이터를 이용한 연산으로 콘텐츠를 설계할 수 있게 해주는 것을 말한다. 따라서 게임시스템을 기획하기위해서는 사용되는 데이터와 데이터의 논리적 관계에 대한 분석이 선행되어야 한다. 사용되는 테이터 형태 - 테이블 형태(관계형 데이터 베이스) 인덱스 데이터1 데이터2 데이터3 데이터4 데이터5 데이터6 데이터7 1001 1002 1003 테이블형 데이터 예시 - 비테이블 형태 데이터 분석 2가지로 구분 - 객체와 객체 간의 분석 : 몬스터, 플레이어, 지형 등의 객체 간의 데이터 분석 - 객체 내부의 분석 : 몬스터 내부의 데이터 분석 시스템 규칙 기획 게임플레이 규칙에 대한 정의 - 규칙의 예 캐릭터 조작 방법 몬스터 생성 방법 캐릭터와 몬스터의 상성관계 특정 몬스터 ..

Command Pattern

Command Pattern is a behavioral design pattern taht turns a request int a stand-alone object that contains all information bout the request. 명령 패턴은 요청에 대한 모든 정보를 포함하는 독립 실행형 개체로 요청을 전환하는 행동 디자인 패턴이다. 플레이어에 대한 로직을 짤 때 초보적인 발상으로 PlayerController에 마구 때려넣는 식으로 코딩을 하는 경우 많다. 예를 들면 PlayerController에 Move()와 Jump(), Attack() 등등의 함수를 구현해놓고 그 안에서 사용한다. 이런 방식이 잘못된 것은 아니지만 결국 유지,보수에 치명적이며, 협업할 시 코드가 너무 많아져..