문제 출처 : https://leetcode.com/problems/add-two-numbers/description/ [문제]두 개의 비어있지 않은 연결 리스트가 주어지며, 각각 두 개의 비음수 정수를 나타냅니다. (1) 각 노드에는 한 자리 숫자가 포함되어 있습니다.(2) 숫자는 역순으로 저장되어 있으므로, 연결 리스트의 첫 번째 노드는 숫자의 1의 자리를 나타냅니다. 이 두 숫자를 더한 결과를 새로운 연결 리스트로 반환하세요. [조건]입력되는 숫자는 0 이외에는 앞에 불필요한 0이 없습니다.(예: 0012와 같은 숫자는 없으며, 유효한 숫자는 12, 0 등입니다.) /** * Definition for singly-linked list. * public class ListNode { * p..
문제 출처 : https://leetcode.com/problems/two-sum/description/ [문제]해당 문제는 주어진 배열 nums 와 정수 target 이 있을 때, 두 숫자의 합이 target 이 되는 배열의 인덱스를 반환하는 문제입니다. [조건](1) 입력에는 반드시 하나의 정답만 존재합니다.(2) 같은 원소를 두 번 사용할 수 없습니다.(3) 반드시 하나의 정답이 존재합니다. public class Solution { public int[] TwoSum(int[] nums, int target) { // Dictionary를 사용하여 숫자 값과 해당 인덱스를 저장 Dictionary numMap = new Dictionary(); // n..
Unity에서 Resources, AssetBundle, Addressable Asset은 게임의 에셋 관리와 로딩을 다루는 주요 방식들입니다. 각각의 차이점은 사용 방식, 성능, 그리고 관리의 편의성에서 나타납니다. 1. Resources개요 : Resources는 Unity 프로젝트에서 Resources 폴더에 에셋을 넣고, 런타임에 이를 로드하는 방식입니다. 특징 :에셋은 빌드 시 하나의 큰 파일로 통합되어 빌드에 포함됩니다.런타임 로드: Resources.Load 메서드를 사용하여 에셋을 동적으로 로드합니다.전체 메모리 로드: 에셋이 필요하지 않아도 프로젝트의 모든 Resources 데이터가 메모리에 로드되므로 메모리 낭비가 발생할 수 있습니다.에셋 업데이트: 에셋 교체를 위해 빌드 전체를 다시..
직렬화(Serialization)란?정의 : 직렬화는 객체나 데이터를 저장하거나 전송하기 위해 일관된 형식으로 변환하는 과정입니다.목적 : 데이터를 파일로 저장하거나 네트워크를 통해 전송하고, 필요할 때 원래의 객체 상태로 복원할 수 있게 합니다. 우선 직렬화는 서로 다른 환경의(서로 다른 컴퓨터에서) 데이터를 저장하거나 전송하기 위해서는 기준이 되는 데이터로 구성되어 있어야 했고, 이를 위해서 채택된 것이 바이트 스트림입니다. 바이트 스트림은 입출력을 할 때 널리 사용되는 방식으로, 데이터를 처리할 때 바이트 단위로 처리한다는 특징이 있습니다. 이미지나 텍스트, 동영상까지 결국 내부적으로 바이트라는 단위를 통해서 처리가 되는데, 그렇다면 각각의 데이터들을 보게되면 결국 일정한 데이터를 일렬로 세워서 순..
드로우 콜(Draw Call) 과 배칭(Batching) 은 렌더링 성능에 중요한 개념입니다. 이를 이해하면 게임 최적화에 도움을 줄 수 있습니다.우선 드로우 콜에 대해 알아보겠습니다. 드로우 콜(Draw Call)드로우 콜은 GPU에게 "화면에 무언가를 렌더링하라"고 요청하는 CPU의 명령입니다.각 드로우 콜은 특정 객체나 메시에 대해 렌더링 파이프라인을 초기화하고 데이터를 GPU로 전송합니다.드로우 콜의 수가 많아지면 CPU가 GPU에 렌더링 요청을 처리하는 데 시간이 오래 결려, 성능 저하가 발생할 수 있습니다. 드로우 콜 증가 요인 서로 다른 재질(Material)을 사용하는 오브젝트 서로 다른 메쉬(Mesh)를 사용하는 오브젝트동적으로 움직이는 오브젝트(애니메이션이나 변형)조명 및 그림자 효과..
[해싱(Hashing)]해싱(Hashing)은 데이터를 저장하고 검색하는 빠른 방법 중 하나입니다.이는 해시 함수를 사용하여 데이터를 해시 값으로 변환한 후, 이 값을 사용하여 데이터를 저장하고 검색합니다.해싱은 주로 사전(딕셔너리)과 같은 추상 자료형을 구현하는 데 사용됩니다. [맵(Map)]사전(dictionary), 맵(map), 테이블(table) :: 셋 다 같은 이름입니다. 균형이진트리의 일종인 레드-블랙 트리로 구현되어 있습니다.키-값으로 저장하고 키로 검색하여 값을 찾고, 이진 탐색을 사용하므로 검색이 빠른 편입니다. 삽입, 삭제 시 균형트리이기 때문에 균형을 유지하는데에 오버헤드가 생깁니다.맵에 삽입하는 경우 이미 있는 key라면 값을 삽입하지 않고 이미 키가 있는 해당 노드의 키/값을..
[2-3 트리]2-3 트리는 모든 내부 노드가 두 개 또는 세 개의 자식을 가지며, 모든 리프 노드가 동일한 깊이에 있는 균형 트리입니다.이는 데이터베이스나 파일 시스템에서 사용되는 B-트리의 기본 형식입니다.2-3 트리는 삽입, 삭제, 탐색 연산이 항상 균형 잡힌 상태에서 이루어지므로 시간 복잡도가 O(logn)입니다. 2-3 트리 작동 원리삽입:새로운 키를 삽입할 때, 현재 노드가 두 개의 키를 가지고 있지 않으면 키를 추가합니다.노드가 두 개의 키를 가지고 있을 때 키를 추가하면 노드가 분할됩니다.분할된 키 중 하나는 부모 노드로 올라가고, 나머지는 두 개의 자식 노드로 분할됩니다.삭제:리프 노드에서 키를 삭제할 때, 노드에 키가 하나만 있으면 병합 또는 차용이 필요합니다.내부 노드에서 키를 ..
트리에는 균현 트리와 경사 트리가 있습니다.경사 트리가 될수록 순차 탐색과 같은 탐색 시간을 가지게 되기 때문에 균형을 유지하는 것이 매우 중요합니다. [AVL 트리]AVL 트리는 높이 균형 이진 탐색 트리의 한 종류로, 각각의 노드에서 왼쪽 서브트리와 오른쪽 서브트리의 높이 차이가 1 이하가 되도록 유지합니다.이 균형을 유지하기 위해 삽입 및 삭제 연산이 발생할 때 트리를 회전시켜 균형을 맞춥니다. AVL 트리는 높이가 log(n)에 비례하도록 유지되므로, 탐색, 삽입, 삭제 연산의 시간 복잡도가 log(n)입니다. AVL 트리 작동 원리삽입:새로운 노드를 삽입한 후, 트리의 균형을 맞추기 위해 필요한 경우 회전을 수행합니다.삭제:노드를 삭제한 후, 트리의 균형을 맞추기 위해 필요한 경우 회전을 ..
[보간 탐색 (Interpolation Search)]보간 탐색은 이진 탐색과 유사하지만, 탐색할 값을 예상 위치로 바로 접근하여 탐색 속도를 향상시키는 알고리즘입니다.보간 탐색은 데이터가 균등하게 분포되어 있는 경우 특히 효과적입니다. 보간 탐색 작동 원리배열의 시작 인덱스와 끝 인덱스를 설정합니다.현재 탐색 범위 내에서 찾고자 하는 값이 있을 것으로 예상되는 위치를 계산합니다.계산된 위치의 값과 찾고자 하는 값을 비교하여 찾고자 하는 값이 현재 위치보다 작으면 왼쪽 부분을, 크면 오른쪽 부분을 탐색합니다.값을 찾을 때까지 또는 탐색 범위가 없을 때까지 이 과정을 반복합니다. 보간 탐색 의사 코드함수 interpolationSearch(arr, n, key): low = 0 high = ..
[색인 순차 탐색 (Indexed Sequential Search)]색인 순차 탐색은 순차 탐색과 색인을 결합한 탐색 알고리즘으로, 데이터가 정렬되어 있는 경우 색인을 사용해 탐색 범위를 좁혀 탐색 시간을 단축할 수 있습니다.큰 데이터셋을 작은 블록으로 나누고, 각 블록의 시작 지점에 대한 색인을 만들어서 탐색 성능을 향상시킵니다. 색인 순차 탐색 작동 원리색인 생성: 데이터를 일정한 크기의 블록으로 나누고, 각 블록의 첫 번째 요소를 색인 테이블에 저장합니다.색인 탐색: 색인 테이블을 순차 탐색하여 찾고자 하는 값이 속할 가능성이 있는 블록을 찾습니다.블록 탐색: 해당 블록 내에서 순차 탐색을 수행하여 값을 찾습니다. 색인 순차 탐색 의사 코드함수 indexedSequentialSearch(arr,..