전체 글 390

0206 모든 1일 체크 리스트 첫 달성

조금이라도 그날 공부한 것은 파란색으로 칠했다. 사실 해야하는 분야나 들어야 하는 강의나 정리해야 할 것들은 이외에도 정말 많은 것들을 배워야 하지만 지금 세운 목표 오늘 할일에 집중하고자 다음과 같은 to do list 들을 세워놓고, 하루에 다 못했던 경우도 많았다. 매일 어느 하나의 공부에 치우치지 않기 위해서 다음과 같은 목표를 세웠고, 오늘 처음 이뤘다. 그러한 것들은 1일 체크리스트 외에 별도로 면접스터디에서 조금씩 채워나가고있다. 균형있는 공부와 균형있는 기본기를 위해서 더 탄탄하고 더 완성도 높은 기본기를 위해서 꼭꼭 더 많이 배우기위해서 지금 오늘 할 수 있는 것에 몰입하고자 노력했지만, 늘 결국에는 언리얼만 하거나, 집중력이 흐려지거나 하곤했었다. 그래도 내일은 꼭 균형있게 공부해야지 ..

리스트 List(배열 기반)

으래 그냥 리스트라고 하면 연결 리스트를 종종 떠올린다. 하지만, 리스트에는 순차 리스트와 연결 리스트가 있다. 순차 리스트는 배열을 기반으로 구현된 리스트이며 연결 리스트는 메모리의 동적 할당을 기반으로 구현된 리스트이다. 하지만 이는 리스트의 구현방법의 차이에서 비롯된 것이기 때문에 이 둘의 ADT가 동일하다고 해서 문제가 될 것은 없다. 물론 각각의 특성의 차이 때문에 ADT에 차이를 두기도 한다. 이는 ADT는 각종 자료구조들의 표준이 아니기 때문이다. 정의하는 사람이나 회사에 따라서, 다시 말해 피룡에 따라서 ADT에도 차이가 난다. 물론 필요에 따라 확장도 가능하다. 하지만 그렇다고 해서 해당 자료구조의 기본 특성을 무시하는 형태로 ADT가 정의되는 것은 아니다. 리스트 ADT 정의를 위해서 ..

트리 순회

트리 순회 일단 트리가 구성되어 있다면, 이 트리를 다양한 방법으로 순회하여 원하는 노드에 접근할 수 잇다. 다양한 순회 방법에 대해 간략히 알아보자. 전위 순회 (preorder traversal) 이 방법은 현재 노드를 먼저 방문하고, 그다음은 현재 노드의 왼쪽 하위 노드를, 마지막으로는 현재 노드의 오른쪽 하위 노드를 재귀적인 방식으로 방문한다. 여기서 '전위(pre)'는 상위 노드를 하위 노드보다 먼저 방문한다는 뜻이다. 전위 순회는 항상 부모 노드를 방문한 다음 왼쪽 자식 노드, 오른쪽 자식 노드를 차례로 방문한다. 이러한 방식의 순호를 루트 노드에서만 수행하는 것이 아니라 루트 노드 아래의 모든 서브 트리에 대해 적용한다. 중위 순회 (in-order traersal) 중위 순회 방법은 왼쪽 ..

STL - 제네릭 프로그래밍과 템플릿

제네릭 프로그래밍 방식 제네릭 프로그래밍 방식에 따라 설계한 소프트웨어 라이브러리는 기존의 다른 소프트웨어 라이브러리와 비교했을 때 몇 가지 뚜렷한 차이점을 발견할 수 있다. 기존의 컴포넌트 설계 방식으로 만들어진 컴포넌트의 조합보다는, 제네릭 프로그래밍 방식에 따라 치밀한 구성과 상호 교체 가능성을 지니도록 만들어진 컴포넌트들의 조합이 다방면에서 더 유용하다. 데이터베이스나 사용자 인터페이스와 같이 다소 특화된 분야에서 사용할 컴포넌트를 추가로 개발하고자 할 때, 제네릭 프로그래밍은 컴포넌트 개발을 위한 근간으로 사용하기에 적당한 설계 방식을 제공한다. 컴파일-타임 매커니즘을 사용하고 ( = 가상 함수는 런-타임 메커니즘이며, STL에서는 가상 함수를 사용하지 않는다), 알고리즘 관련 이슈들에 관해 충..

정적 멤버와 상수 멤버

정적 멤버 변수 C++에서 정적 멤버란 클래스에 속하지만, 객체 별로 할당되지 않고 클래스의 모든 객체가 공유하는 멤버를 의미한다. 멤버 변수가 정적(static)으로 선언된다면, 해당 클래스의 모든 객체에 대해 하나의 데이터만 유지 관리된다. 정적 멤버 변수는 클래스 영역에서 선언되지만, 정의는 파일 영역에서 수행된다. 이러한 정적 멤버 변수는 외부 연결 (external linkage)을 가지므로, 여러 파일에서 접근할 수 있다. 정적 멤버 변수에도 클래스 멤버의 접근 제한 규칙이 적용되므로, 클래스의 멤버 함수나 프렌드만이 접근할 수 있다. 하지만 정적 멤버 변수를 외부에서도 접근할 수 있게 하고 싶으면, 정적 멤버 변수를 public 영역에 선언하면 된다. 다음 예제는 모든 Person 객체가 같..

컴포넌트 패턴

컴포넌트 패턴이란? 컴포넌트 패턴 혹은 컴포지션(Composition) 패턴이란 미리 만들어진 부품을 조립하여 완성된 오브젝트를 만드는 방식이다. 여기서 미리 만들어진 부품을 컴포넌트라 부르며, 컴포넌트는 저마다의 대표 기능을 지닌다. 컴포넌트 패턴에서 게임 오브젝트는 속이 빈 껍데기이다. 개발자는 빈 게임 오브젝트에 컴포넌트를 조립하여 새로운 기능을 추가할 수 있다. 상속기능에만 의존하여 자식 클래스를 만들다 보면 빼야할 기능과 추가해야 할 기능이 갈리게 된다. 프로그래머만이 부모 클래스를 확장하여 새로운 자식 클래스를 만들게 된다면 프로그래머와 기획자 혹은 디자이너 팀이 번거로울 것이다.. 때문에 상속에만 의존하여 게임 개발을 할 때, 대표적으로 생기는 문제점은 다음과 같다. 1. 오히려 코드를 재사..

Unity 2024.02.05

Unity 기본 설정

Unity에서 주로 쓰이는 창 여섯 개를 메인 창이라고 한다. Scene 씬창 : 씬은 게임 월드인 씬을 시각적으로 편집하는 창 Hierarchy 하이어라키 창 : 씬에 존재하는 모든 게임 오브젝트가 나열되는 창 Inspector 인스펙터 창 : 선택한 게임 오브젝트의 정보가 표시되는 창 Game 게임 창 : 플레이어가 실제로 보게 될 화면을 띄우는 창 Project 프로젝트 창 : 프로젝트에 사용할 에셋들이 표시되는 창 Console 콘솔 창 : 로그나 에러가 표시되는 창 해당 화면은 2 by 3 레이아웃을 사용하여 분할하였다. 레이아웃은 어디ㅣ까지나 개인의 취향 영역이며 어떤 레이아웃을 선택하여 사용하더라도 무관하다.

Unity 2024.02.05

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; }