CS 29

연관 컨테이너와 레드-블랙 트리 / 비정렬 연관 컨테이너와 해시 테이블

C++ vs C# 형태 비교C++ 컨테이너 형태C# 컬렉션 형태핵심 자료구조 (동일)특징 (동일)mapsetSortedDictionary SortedSet레드-블랙 트리자동 정렬O(logN) 성능unordered_mapunordered_setDictionary HashSet해시 테이블비정렬평균 O(1)의 빠른 성능 ※ 아래에서부터는 C++ 기준으로 설명하도록 하겠다. 연관 VS 비정렬 연관 비교구분연관 컨테이너 (map, set)비정렬 연관 컨테이너 (unordered_map, unordered_set)핵심 자료구조레드-블랙 트리 (Red-Black Tree)해시 테이블 (Hash Table)데이터 정렬키(Key) 기준으로 자동 정렬됨정렬되지 않음시간 복잡도검색, 삽입, 삭제 모두 O(logN)평균적으로..

CS/자료구조 2025.10.15

map / unordered_map

map이란?Map은 Key와 Value를 하나의 쌍(pair)으로 묶어서 저장하는 연관 컨테이너(Associative Container)입니다. Key 값을 이용해 Value에 빠르게 접근(검색, 삽입, 삭제)하는 것을 목적으로 합니다. 주요 특징은 다음과 같습니다.Key-Value 쌍 : 모든 데이터는 Key와 그에 해당하는 Value로 구성됩니다.고유한 Key : Key 값은 중복될 수 없습니다. 만약 중복된 Key로 새로운 값을 추가하면, 기존의 Value가 덮어씌워집니다.빠른 검색 속도 : Key를 기반으로 데이터를 검색하기 때문에 매우 빠른 시간 복잡도를 가집니다. 일반적으로 O(log N) 또는 O(1)의 시간 복잡도를 보입니다. C++과 C#에서의 MapC++C++ 표준 라이브러리(STL)에..

CS/자료구조 2025.10.15

C# Virtual / Abstract / Interface

비교구분Virtual (가상)Abstract (추상)Interface (인터페이스)한 줄 요약기능의 선택적 재정의기능의 강제적 재정의구현을 위한 명세/계약구현 여부✅ 구현된 본체(body) 있음❌ 본체(body) 없음 (선언만)❌ 본체(body) 없음재정의(Override)선택 (필요시 override)필수 (반드시 override)필수 (반드시 구현)인스턴스화가능불가능불가능다중 상속/구현단일 상속단일 상속다중 구현 가능키워드virtual / overrideabstract / overrideinterface / :(구현)관계is-a (상속 관계 강화)is-a (상속 관계)can-do (기능 중심) Virtual "기본 레시피를 제공할게, 바꾸든 말든 자유야!"virtual은 부모 클래스에 이미 완성된 기..

CS/C#_C++ 2025.10.13

오일러(Euler) 쿼터니언(Quaternion) 짐벌락(Gimbal Lock)

영상/사진 출처 및 참고 영상 오일러오일러 각은 우리가 일상에서 흔히 사용하는 각도계처럼, x, y, z 세 개의 축을 기준으로 오브젝트를 회전시키는 방식입니다. 각 축에 대한 회전량을 개별적인 각도로 표현합니다. 회전 방식 : X, Y, Z와 같은 특정 순서대로 각 축에 대해 순차적으로 회전을 적용합니다.(Unity에서는 기본적으로 X, Y, Z 순서로 오일러 각을 계산합니다.) 축의 부모-자식 관계 : 오일러 회전은 각 회전축을 마치 부모-자식 관계로 구성하는 특징이 있습니다. 예를 들어 XYZ 회전에서 Z는 할아버지, Y는 아버지, X는 아들 쯤으로 비유할 수 있습니다. 이 관계 때문에 부모 회전이 자식 회전축의 방향을 변경할 수 있습니다.(Z가 회전하면, YX 영향. Y가 회전하면, X 영향)..

CS/게임 수학 2025.10.13

삼각비(SIN, COS, TAN)

삼각비의 기초 : 직각삼각형모든 삼각비의 논의는 직각삼각형에서 시작됩니다. 직각삼각형은 한 각이 90도인 삼각형으로, 각 변은 기준각(θ)에 따라 다음과 같이 불립니다.빗변 (Hypotenuse) : 직각과 마주보는 가장 긴 변입니다.높이 (Opposite) : 기준각과 마주보는 변입니다.밑변 (Adjacent) : 기준각에 붙어있는 변 중 빗변이 아닌 변입니다.이를 바탕으로 세 가지 기본 삼각비는 두 변의 비율로 정의됩니다.사인 : sin(θ) = 빗변/높이​코사인 : cos(θ) = 빗변/밑변​탄젠트 : tan(θ) = 밑변/높이​이 비율은 삼각형의 크기와 상관없이 각도(θ)가 같다면 항상 일정합니다. 단위 방향 벡터의 이해 (핵심)여기서 "단위 방향 벡터"라는 중요한 개념이 등장합니다. 이 개념을..

CS/게임 수학 2025.10.09

내적을 활용한 몬스터 시야각 판정

(예전에 2D 게임을 만들 때를 생각하며, 문제를 만들어봄.) ✍️ 문제2D 공간에 플레이어와 몬스터가 있습니다. 몬스터는 자신의 오른쪽을 정면으로 바라보고 있으며, 시야각은 90도(좌우 45도씩)입니다. 아래 좌표를 바탕으로 플레이어가 몬스터의 시야에 들어왔는지 판별하세요. (※ 이 문제에서는 거리는 생각하지 않는다)플레이어 위치 (Player Position) : P = (7,5)몬스터 위치 (Monster Position) : M = (4,3)몬스터의 전방 벡터 (Monster Forward Vector) : F = (1,0) ✅ 문제 풀이( ※ 수식 깨짐 문제로 인해, 이미지로 대체함.)

CS/게임 수학 2025.10.09

백터의 내적 외적

참고 영상 : https://www.youtube.com/watch?v=bYivO9VgN0k&t=2s벡터의 내적 (Dot Product)두 벡터가 얼마나 같은 방향을 바라보고 있는가? 두 벡터가 얼마나 같은 방향을 바라보고 있는가를 나타내는 연산입니다. 내적은 두 벡터를 곱하여 스칼라(Scalar) 값, 즉 방향이 없는 크기만 있는 값을 결과로 얻습니다. 이 값은 두 벡터의 방향적 유사성을 나타냅니다. 두 벡터 A와 B가 있을 때, 내적은 기호 '∙'를 사용하여 표기합니다. ✅ 개념 및 공식 ✅ 핵심 특징 및 게임 속 활용내적 결과의 부호만으로 두 벡터의 방향 관계를 직관적으로 파악할 수 있습니다.A⋅B>0 : 두 벡터의 사이각 θ가 90도보다 작습니다. (같은 방향을 향함)A⋅B=0 : 두 벡터의 사이..

CS/게임 수학 2025.10.09

오버로딩(Overloading)과 오버라이딩(Overriding)

다형성(Polymorphism)을 구현하는 방식이지만, 동작 원리와 사용 목적에서 명확한 차이가 있습니다. 오버로딩 (Overloading) 이란?"이름은 같지만, 매개변수가 다른 여러 개의 메서드를 정의하는 것"오버로딩은 하나의 클래스 내에서 같은 이름의 함수를 여러 개 가질 수 있게 해주는 기능입니다. 컴파일러는 메서드를 호출할 때 전달되는 매개변수의 개수, 타입, 순서를 보고 어떤 메서드를 호출할지 결정합니다. 즉, 메서드 시그니처(Method Signature)의 일부가 달라야 합니다. 핵심 특징:같은 클래스 내에서 발생합니다.메서드 이름은 동일해야 합니다.매개변수의 개수나 타입, 순서가 달라야 합니다.반환 타입(Return Type)만 다른 것은 오버로딩으로 인정되지 않습니다.컴파일 타임(Com..

CS/개념 2025.10.08

C++ 가상 함수(Virtual Function)와 가상 함수 테이블(VTBL)

사전 지식: 오버로딩 vs 오버라이딩C++에서 다형성을 구현하는 대표적인 두 가지 기술입니다.(C#에서도 마찬가지로 사용)구분함수 오버로딩 (Function Overloading)함수 오버라이딩 (Function Overriding)핵심같은 이름, 다른 매개변수같은 이름, 같은 매개변수 (재정의)관계같은 클래스 또는 같은 네임스페이스부모-자식 상속 관계에서만 성립바인딩컴파일 시점에 호출 함수 결정 (정적 바인딩)실행 시점에 호출 함수 결정 (동적 바인딩)목적이름 하나로 다양한 타입 처리 (사용 편의성)부모의 기능을 자식에 맞게 수정/확장키워드없음virtual, override (권장)간단히 말해, 오버로딩은 이름만 같은 별개의 함수들을 만드는 기술이고, 오버라이딩은 부모에게 물려받은 함수를 자식이 자신에..

CS/C#_C++ 2025.10.08

OOP (Object-Oriented Programming)

OOP란 무엇인가? OOP(Object-Oriented Programming)란 현실 세계의 사물이나 개념을 객체(Object)로 모델링하고, 이 객체들 간의 상호작용을 통해 프로그램을 설계하고 개발하는 프로그래밍 패러다임입니다. 쉽게 말해, 연관 있는 데이터(변수)와 그 데이터를 처리하는 함수(메서드)를 하나의 '객체'라는 덩어리로 묶어서 관리하는 방식입니다. 이를 통해 코드의 재사용성을 높이고, 유지보수와 확장을 훨씬 효율적으로 할 수 있습니다. Entity vs Object?구분설명예시개체 (Entity)현실 세계에 존재하는 구체적인 대상 자체실제로 존재하는 "내 캐릭터", "슬라임 몬스터"객체 (Object)개체를 프로그래밍 세계에서 표현한 것데이터와 기능을 묶은 단위Player myPlayer ..

CS/개념 2025.10.07