c# 53

이진트리(Binary Tree)

이진트리 이진트리는 각 노드가 최대 두 개의 자식 노드를 가지는 트리 자료구조이다 노드의 자식중 왼쪽에 있는 것을 왼쪽 자식 노드, 오른쪽에 있는 것을 오른쪽 자식 노드라고 한다 각 노드는 자식을 가지지 않을 수 있다 아래는 위 이미지에 맞게 이진트리를 구현하는 코드이다 using System; using System.Collections.Generic; using System.Text; namespace BinaryTree { class Tree { public int data; public Tree left; public Tree right; //생성자 public Tree(int data) { this.data = data; this.left = null; this.right = null; } } ..

C# 2023.02.12

재귀함수(Recursive call)

재귀함수는 자기 자신을 호출하는 함수이다 아래 코드의 SayHello()는 재귀함수이다 class Program { static void Main(string[] args) { SayHello(); } static void SayHello() { SayHello(); } } 단 재귀함수 호출 시 위의 예시처럼 호출 종료 조건을 정의하지 않으면 Stack 메모리에 콜스택이 무한대로 쌓여서 StackOverFlowError가 발생한다 이때 호출 종료 조건을 base condition이라고 부른다 아래는 재귀함수 개념을 적용해서 작성한 Factorial과 Fibonacci 수열을 구현한 함수이다 using System; namespace Recursion { class Program { static void ..

C# 2023.02.07

오브젝트 풀링(Object Pool)

오브젝트 풀링은 프로젝트 최적화 기법 중 하나이다 개념을 간단히 말하자면 게임에 필요한 오브젝트들을 오브젝트 풀에 미리 생성해서 필요할 때마다 꺼내서 쓰고 사용이 끝나면 풀에 돌려주는 것이다 아래는 오브젝트 풀링의 과정이다 먼저 오브젝트를 담을 풀을 만든다 그리고 풀에 오브젝트들을 생성해서 오브젝트 풀에서 오브젝트들을 관리하게 만든다 외부에서 오브젝트를 필요로 하면 오브젝트 풀에서 꺼내간다 꺼내갈 때 풀 안의 모든 오브젝트들이 사용 중이라면 새로운 오브젝트를 생성해서 꺼내준다 꺼내간 오브젝트의 사용이 끝나면 풀에 돌려준다 오브젝트 풀링을 이용하면 필요할 때마다 오브젝트를 생성하고 사용이 끝나면 삭제하는 방식을 이용할 때보다 CPU의 부담이 적어진다 아래는 오브젝트 풀링을 적용한 코드이다 오브젝트 10개를..

C# 2023.02.05

이분탐색/이진탐색/Binary Search

이분 탐색이 무엇인가? 정렬된 리스트에서 탐색 범위를 반씩 좁혀가며 특정 값을 찾는 탐색 알고리즘 시간 복잡도는 어떻게 되는가? 순서대로 탐색하는 순차탐색의 시간복잡도는 O(N) 범위를 반씩 좁혀가며 탐색하므로 순차탐색보다 작은 O(logN)의 시간복잡도를 가진다 언제 써야 하지? 정렬된 리스트에서 특정값이 처음 등장하는 위치를 찾을 때 Lower Bound, Upper Bound는 뭐지? Lower Bound는 현재 탐색 범위에서 가장 작은 값의 위치, Upper Bound는 현재 탐색 범위에서 가장 큰 값의 위치이다 예를들어 정렬된 배열 arr={1, 2, 3, 4, 5}가 있을때 Lower Bound는 최솟값인 1이 위치한 인덱스 0을 말하고 Upper Bound는 최댓값인 5가 위치한 인덱스 4를..

C# 2023.01.29

디자인 패턴-singleton

카테고리: 생성 개요: 하나의 클래스가 하나의 인스턴스만 갖도록 제한하고 전역 범위에서 그 인스턴스를 액세스 할 수 있게 한다 시스템 전체에 걸쳐 하나의 인스턴스가 모든 처리를 조율해야 하는 곳에 유용하다 클래스의 생성자를 private으로 한다 자신이 자신의 인스턴스를 생성한다 싱글턴 인스턴스는 처음 싱글턴 인스턴스의 변수에 액세스 할 때 생성되어 프로그램이 종료될 때까지 동일한 인스턴스를 사용한다 static readonly(public이어야 전역에서 읽기 가능) 필드에 객체를 생성 ~Manager:보통 싱글톤임 using System; using System.Collections.Generic; using System.Text; namespace Study14 { class DataManager {..

Unity/기타 2023.01.16

리스트, 스택, 큐 직렬화/역직렬화

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; using System.IO; namespace Study11 { class App { //생성자 public App() { //리스트 만들고 아이템 넣기 List items0 = new List(); items0.Add(new Item() { Name = "장검", Damage = 10 }); items0.Add(new Item() { Name = "단검", Damage = 5 }); //스택 만들고 아이템 넣기 Stack items1 = new Stack(..

C# 2023.01.13
반응형