프로그래밍 282

1月 ~ 2月 1日까지 기록

1월은 이곳 저곳 많이 지원했었다. 지원한 곳1차2차스마일 게이트불합격x크래프톤합격불합격게임 인재원합격아직 모름 크래프톤은 처음 코딩테스를 봤던 회사여서 굉장히 떨렸었다. 더욱 열심히 공부하여 재도전에는 합격할 수 있도록 하자. 2.13일부터 2.23일까지 열흘 간 인재원에서 교육을 받고, 이후 게임잼 등 다양한 활동 후에 최종 선발을 한다고 한다. 선발 되도록 자료구조 알고리즘이나 DX, OpenGL, 게임 수학에 대해서 더 공부하고자 한다. 게임 인재원 6기 프리스쿨을 진행하는 동안 짧게라도 기록을 남기도록 하자. 요즘같은 취업 불경기에 다행히도 좋은 교육기관을 알게되었고 서류통과하여 프리스쿨에서 교육을 받을 기회가 생긴 것이 운이 좋았다.

백준 - 괄호 9012

괄호를 풀기 전에 스택이라는 개념을 잡고 풀어보자. Stack은 '쌓다', 또는 '무언가가 쌓여 있는 더미'등을 의미한다. 스택은 의미 그대로 어떤 데이터를 삽입/삭제하는 과정을 '쌓는' 형태로 나타낼 수 있는 자료구조이다. 스택은 FILO 구조로 처음에 넣은 데이터는 가장 아래에 위치하게 된다. 다음 들어오는 데이터들은 그 위에 순서대로 쌓인다. 데이터들을 뺄 때는 제일 위에 있는 데이터부터 빼야 한다. 결과적으로 가장 처음에 넣은 데이터는 가장 마지막에 빠지게 된다. 이를 First-In-Last-Out이라고 한다. 반대로 가장 마지막에 들어왔던 데이터는 가장 먼저 빠진다 이를 Last-In-First-Out 이라고 한다. 이것이 스택의 특징이다. 스택에 대한 예로는 인터넷 웹 서핑을 할 때 접속한 ..

열혈 자료구조 - 재귀의 활용 하노이 타워 코드 및 실행

하노이 타워 코드 #include void HanoiTowerMove(int num, char from, char by, char to) { if (num == 1)// 이동할 원반의 수가 1개라면 { printf("원반1을 %c에서 %c로 이동 \n", from, to); } else { HanoiTowerMove(num - 1, from, to, by); printf("원반%d을(를) %c에서 %c로 이동 \n", num, from, to); HanoiTowerMove(num - 1, by, from, to); } } int main(void) { // 막대 A의 원반 3개를 막대 B를 경유하여 막대 C로 옮기기 HanoiTowerMove(3, 'A', 'B', 'C'); return 0; }

열혈 자료구조 - 재귀적 호출의 이해

재귀는 자료구조와 알고리즘에 있어서 매우 중요한 요소이고,C언어는 이렇듯 중요한 재귀를 지원하는 언어이다. 재귀함수의 기본적인 이해 재귀함수란 무엇인가?재귀함수란 다음과 같이 함수 내에서 자기 자신을 다시 호출하는 함수를 의미합니다. void Recursive(void){ printf("Recursive call! \n"); Recursive(); // 나 자신을 재호출한다}  위 형태의 함수가 재귀호출이다.그렇다면 재귀 호출은 어떻게 이해해야 할까?  다음 그림과 같은 구조는 매우 단순해 보이지만,그림 내용대로 재귀함수를 이해하는 것이 여간 쉬운 일은 아니다. 그렇다고 위 그림이 재귀호출에 대해서 잘못 설명하고 있다거나 하지는 않는다. 해당 함수는 완료되지 않은 함수를 다시 호출하는 것이 ..

가비지 컬렉션

가비지 컬렉션이란? 가비지 컬렉션은 메모리 관리 기법 중 하나로 프로그래밍을 하다 보면 동적으로 할당해준 메모리에 대한 지속된 관리가 필요합니다. 컴퓨터는 일정한 메모리 용량을 가지고 있고, 정해진 메모리를 초과하게 되면 동작하는 프로그램이 정상적으로 작동하지 않을 수 있습니다. 때문에 가비지 컬렉터를 통해서 프로그램이 동적으로 할당했던 메모리 영역 중에서 더 이상 쓰이지 않고 필요 없는 영역을 해제하는 것을 말합니다. C++에서는 수동 메모리 관리를 가정하고 설계하였으나, 언리얼에서는 가비지 컬렉션을 통해서 프로그래머가 관리해야 할 메모리 영역이 줄어듭니다. 가비지 컬렉션의 장단점 장점의 첫 번째로는 유효하지 않은 포인터의 접근을 막을 수 있습니다. 유효하지 않은 포인터의 접근을 막지 않으면 만약 이 ..

UE5 2024.01.26

유클리드 공간

유클리드 공간 (유클리드 기하학 Euclidean Geometry)란? 유클리드가 연구했던 평면과 공간을 일반화한 것을 말한다. 유클리드 기하학은 공간에서의 거리, 각도 등을 다루는 수학 분야이다. 이 일반화는 유클리드가 생각했던 거리와 길이와 각도, 좌표계를 도입하여, 임의차원의 공간으로 확장한 것을 말한다. 이는 표준적인 유한 차원, 실수, 내적 공간이다. 유클리드 공간은 수하학적 모델링, 물리학, 컴퓨터 그래픽스 등의 다양한 분야에서 사용된다. 유클리드 벡터 또는 벡터는 특수한 경우로, 유클리드 공간에서의 크기와 방향을 모두 포함하는 기하학적 대상이다. 피타고라스 정리와 비슷한 개념이며, 실제 거리를 구할 때에도 사용하지만, 인공지능 등 다양한 분야에서 유사도를 판단할 때 사용된다. 피카고라스 정리..

레이캐스트와 트레이스

레이캐스트와 트레이스는 같은 작업을 뜻한다. 게임에서 플레이어 캐릭터가 무언가를 바라보고 있는지 확인하여 그런 경우 게임을 어떤 상태로 변경하고자 (예를 들어 플레이어가 무언가를 바라보면 강조시키고자)하는 경우가 있다. 또는 적이 플레이어 캐릭터를 볼 수 있는지 확인하여 그런 경우 어떤 식으로든 발사 또는 교전을 시작시켰으면 하는 경우가 있다. 이러한 두 가지 모두 레이캐스트 또는 트레이스를 통해 보이지 않는 광선을 "발사"하여 두 점 사이에 걸리는 지오메트리가 있는지 확인하고, 걸리는 지오메트리가 있으면 어떤 작업을 할 수 있도록 반환한다. 트레이스 실행 시 사용할 수 있는 옵션은 여러가지가 있다. 트레이스를 실행하여 오브젝트와 콜리전 검사를 한 뒤 히트한 오브젝트를 반환하거나, Trace Channe..

UE5 2024.01.11

해시 테이블과 블룸 필터 (2) - 해시 테이블에서 충돌 체이닝

앞선 게시글에서 해시 테이블을 이용하여 필요한 키를 저장하고 검색하는 방법에 대해 알아보았다.그러나 다수의 키가 같은 해시 값을 갖는 충돌 문제가 발생한다는 점도 배웠다.이전 예시에서는 같은 해시 값을 갖는 키에 대해서는기존 키를 덮어써서 가장 최근에 추가된 키만 유지되도록 했었다.그러나 이 방식은 다수의 키글 저장할 수 없는 문제가 있다.그러므로 이러한 문제를 해결하고해시 테이블에 모든 키를 저장할 수 잇는 몇 가지 방법에 대해 알아보자.  해시 테이블에서 충돌 해결 방법1. 체이닝 2. 열린 주소 지정 2-1 .선형 탐색 2-2. 이차함수 탐색3. 뻐구기 해싱   체이닝앞에서는 하나의 해시 값에 대해 하나의 원소만을 저장했다.그래서 특정 해시 값 위치에 이미 원소가 존재한다면새로운 값과 예전 값 중 ..