게임 프로그래밍 전문가 필기 2021 2 - A
게임 프로그래밍 방법론
문제 1. 구조체
해설:
'13' 은 문자로 표현했기 때문에 정수로 표현할 수 없음.
- ① A는 문자열 포인터(const char*)를 사용해 메모리를 많이 차지함.
- ② A는 52장 × (포인터 + int = 4+4) = 416바이트 (32bit 환경 기준).
- ③ B구조체는 char 하나로 무늬(S/H/D/C), char 하나로 번호(1~13) 표현 가능.
정답: ④
문제 2. 데이터베이스
해설: 이 설명은 SQL
- LUA: 게임에서 스크립트 언어로 주로 사용됨.
- PERL: 텍스트 처리에 강한 스크립트 언어.
- PHP: 웹 개발용 서버 사이드 언어.
정답: ①
문제 3. 포인터
해설:
포인터끼리 직접 빼면 ‘몇 개 떨어져 있냐’를 의미,
정수형으로 캐스팅하면 ‘바이트 차이’를 의미.
value 1 = p[4] - p[1] = 16 - 2 = 14
value 2 = (p+4) - (p+1) = 3 / 포인터 간 거리 계산
value 3 = (long)(p + 4) - (long)(p + 1) = 3 * int 바이트 수(4) = 12 / 바이트 단위 주소값 차이 계산
정답: ②
문제 4. 변환문자
해설:
- %u: unsigned 정수
- %f: 실수 출력
- %x → 16진수 출력
- %p → 포인터 주소 출력
정답: ③
문제 5. 2차원 배열 포인터 연산
해설:
a[0][0] = 0, a[0][1] = 1, a[0][2] = 2
a[1][0] = 3, a[1][1] = 4, a[1][2] = 5
- a + 1 → a[1]
- (*p) + 2 → a[1][2]
- *((*p) + 2) → 5
정답: ④
문제 6. 컴파일 에러
해설:
- const Actor* actor는 const 객체
- 하지만 GetTotalCount()는 const 함수가 아님
- C++에서는 const 객체는 const 함수만 호출할 수 있음
정답: ④
문제 7. 객체지향 프로그래밍
해설:
객체지향(OOP)의 핵심 개념 중 하나는 캡슐화 + 정보 은닉
관련된 변수/함수를 클래스로 묶고, 중요한 정보는 은닉(private)
- ① C 언어는 OOP 불가능하지만 구조체로 유사 표현은 가능
- ③ 상속은 has-a 보다는 is-a 관계일 때 사용
- ④ C++ 클래스 멤버 함수는 기본적으로 가상함수 아님 (virtual 명시해야 다형성)
정답: ②
문제 8. 중첩 반복문
해설:
조건문에서 % 연산자
- i % 2의 결과가 0이 아니면 true, 0이면 false
- 즉, 홀수면 true, 짝수면 false
따라서 짝수만 total에 더해지기 때문에 2,4,6,8,10 더한 결과임
정답: ③
문제 9. 날짜와 시간
해설:
UTC는 세계 표준시로 사용
GMT와 거의 동일
KST = UTC +09:00
- UTF: 문자 인코딩 방식
- CST: 미국 중부 표준시
- PST: 미국 태평양 표준시
정답: ①
문제 10. 리틀 앤디안 배열 출력
해설:
리틀 앤디안에서는 하위 바이트부터 저장됨.
- short는 2바이트 자료형
- p[0]은 arr[0], arr[1]을 한 덩어리(2바이트)로 해석
- 메모리: [0x01][0x02] → 리틀 엔디안 기준 = 0x0201
16진수기 때문에 0201을 10진수로 변환하면 256x2 + 1x1 =513
정답: ③
문제 11. 전처리기
해설:
#으로 시작하는 전처리 지시문이 아닌 typedef는 타입 정의 키워드이며, 전처리기 문법이 아님.
- ② #undef: 매크로 해제 전처리기
- ③ #include: 파일 포함 전처리기
- ④ #ifndef: 조건부 컴파일
정답: ①
문제 12. 리틀 엔디안, 빅 엔디안
해설:
- 엔디안 차이는 CPU 아키텍처에 따라 달라짐.
- 데이터 송수신 시 명시적 변환 (htonl, ntohl 등)을 해야 함.
- 랜카드는 하드웨어로, 자동 변환 불가.
정답: ③
문제 13. 매크로
해설:
매크로 실행 중 괄호 여부에 따라 결과가 달라지는 것을 이용한 문제임.
int a = 1+2 * 3 * 4 = 연산자 우선순위에 따라서 25
정답: ②
문제 14. 문자 인코딩
해설:
WBCS (Wide Byte Character Set)
- 문자 표현을 위해 고정된 크기 (보통 2바이트 이상) 사용
- C/C++에서 wchar_t, L"..."가 사용됨
- 주로 유니코드 환경, UTF-16이나 UCS-2와 관련 있음
①SBCS: single byte , ASCII 기반 char, 1바이트 문자만 사용.
② MBCS: multi byte, 가변 바이트 문자셋, char 기반.
정답: ③
문제 15. 소스코드 처리과정
해설:
소스코드를 목적코드(기계어)로 변환하는 과정 = 컴파일러
링커는 목적코드(.obj) + 라이브러리(.lib)를 연결하여 실행파일 생성
- relocator: 링커 후 메모리 재배치 (이 단계 아님)
- interpreter: 스크립트 언어 실행기 (C/C++에 해당 안 됨)
- memory allocator: 실행 시점 메모리 할당 처리
정답: ①
문제 16.
해설:
Name Mangling은 C++에서 오버로딩을 지원하기 위해 컴파일러가 함수 이름을 유니크하게 바꾸는 기능
- ① 오버로딩: 함수 시그니처 다르게 선언
- ② 인터프리터: 실행 시 코드 해석
- ③ 로더: 실행 시 프로그램 메모리에 로딩
정답: ④
문제 17. 함수포인터
해설:
(*funtionPnt1)은 함수의 주소값이므로,
- int a = 주소값; 이라는 의미가 되어 버림 → int에 함수 주소를 저장하려 하니 오류 발생
- 정상적인 방식 → int a = (*funtionPnt1)();
정답: ③
문제 18. 참조형식
해설:
Plus1은 값 형식이지만 a= Plus1(a,b)이기에 a에는 a + b 값이 전달,
Plus3은 참조 형식으로 a가 변경됨 다시 a = a + b,
Plus4는 값 형식으로 값이 변경이 안됨으로 출력 시 Plus 3() 이후와 값이 같음
정답: ④
문제 19. 동적 메모리 할당
해설:
동적 메모리 할당을 위해서는 malloc() 함수를 사용하고 해제에는 free() 함수,
생성된 동적 메모리는 Heap 영역에 할당됨.
정답: ②
문제 20. 컴파일 에러 발생 위치
해설:
C99부터는 가변 길이 배열(VLA) 허용되나,
Visual Studio 2019는 C++에서 VLA 미지원
→ int nArray [len];는 컴파일 오류
→ 동적 할당을 사용해야 함
정답: ①
문제 21. TCP/IP
해설:
- TCP는 느리지만 신뢰성 보장 (연결지향, 데이터 순서 보장)
- UDP는 빠르지만 데이터 유실 가능 (비연결지향)
정답: ④
문제 22. 생성자, 복사 생성자
해설:
복사 생성자
새로운 객체를 만들면서 기존 객체로 초기화할 때 호출.
MyClass b는 객체 a를 복사하여 만드므로 복사 생성자 호출.
MyClass m은 새로운 객체를 만들어서 기존 객체 a로 초기화하는 것이므로
대입연산자가 아닌 복사 생성자가 호출되어 ABB 출력.
정답: ③
문제 23. 다중 상속
해설:
- 다중 상속 시, 동일한 이름의 함수가 여러 부모 클래스에 존재하면 모호성 발생
- 객체명.클래스명::함수() 식으로 명시적으로 호출
정답: ③
문제 24. 포인터
해설:
- *p++ = i; 는 p 포인터 자체가 앞으로 계속 이동됨
- → free(p); 시 원래 malloc 한 주소가 아님
정답: ③
문제 25. 추상클래스
해설:
- Base 클래스 생성자 내에서 virtual 함수 호출 금지
- 이때는 아직 파생 클래스가 생성되지 않은 상태
- reset()은 순수가상함수 → 구현체 없음 상태에서 호출되어 런타임 에러 발생
정답: ③
게임 알고리즘과 설계
문제 1. 이진 탐색
해설:
- 이진 탐색은 매번 검색 범위를 절반씩 줄이므로 로그 시간
- 시간 복잡도는 O(log n)
정답: ②
문제 2.
해설:
- 자기 자신을 호출하는 구조
- 트리 순회, 프랙탈, 피보나치 등 다양한 알고리즘에서 사용
정답: ①
문제 3. 큐와 스택
해설:
- 스택은 선형 자료구조 (LIFO)
- 삽입/삭제가 같은 쪽에서 발생
정답: ①
문제 4. 정렬 알고리즘
해설:
- 선택 정렬 - 가장 작은(큰) 값을 찾아 앞쪽부터 순차적으로 교환하는 정렬.
- 삽입 정렬 - 현재 요소를 왼쪽의 정렬된 영역에 적절히 삽입하며 정렬을 확장하는 방식.
- 퀵 정렬 - 기준을 정하고 작고 큰 값으로 분할을 반복하는 분할 정복 정렬.
- 버블 정렬 - 인접한 두 값을 비교하며 큰 값을 오른쪽으로 조금씩 밀어내는 정렬.
정답: ①
문제 5. 트리
해설:
- 최소힙은 완전 이진트리이면서 부모 < 자식 (min heap)
정답: ④
문제 6. 전위 표기법
해설:
전위 연산자는 연산자 - 피연산자 -피연산자 순서
- B * C
- D / E
- A + (B * C)
- A + (B * C) - (D / E)
- ((A + (B * C)) - (D / E)) + F
- +-+A*BC/DEF
정답: ①
문제 7. 균형 탐색 트리
해설:
AVL 트리는 가장 오래된 균형 이진 탐색 트리
삽입/삭제 시 Balance Factor로 균형 유지
- ② 디지털 트리는 정수/문자열 트리
- ③ 레드블랙 트리는 색상 기반 균형 유지
- ④ 2-3-4 트리는 다중 자식 노드 허용 B-Tree
정답: ①
문제 8. 완전 그래프
해설:
n개의 정점이 있는 완전 그래프(Kₙ)의 간선 수 = n(n-1)/2
정답: ②
문제 9. 너비 우선 탐색
해설:
- BFS는 큐(Queue) 기반 → 현재 노드에서 인접 노드를 모두 탐색한 후 다음으로 넘어감
- 정점들의 연결 구조에 따라 순서가 나옴
- 같은 레벨에 있는 노드들을 먼저 순회한다고 이해하면 됨
정답: ④
문제 10. 공간분할기법
해설:
- Octree: 3D 공간 → 8 분할
- Quad Tree: 2D 공간 → 4 분할
- BSP: Binary Space Partition, 반으로 나누는 분할
- PVS: Potentially Visible Set, 가시성 집합
정답: ②
문제 11. 최단 경로 알고리즘
해설:
다익스트라는 음의 가중치가 없는 그래프에서
시작 정점으로부터 다른 모든 정점까지 최단 거리 계산
힙 기반 우선순위 큐 사용
- ① 벨만-포드: 음수 가중치 가능
- ③ A*: 휴리스틱 기반 (예측)
- ④ BFS: 가중치 없는 그래프에서만 최단 경로
정답: ②
문제 12. 단위 벡터 계산
해설:
벡터 v 구하기
벡터의 크기 구하기
단위 벡터 구하기
정답: ①
문제 13. 디자인 패턴
해설:
옵저버(Observer) 패턴
대표적인 구독/알림 구조
- ② 팩토리: 객체 생성 책임 분리
- ③ 커맨드: 명령 캡슐화
- ④ 스테이트: 상태에 따라 동작 다르게
정답: ①
문제 14. 자료구조
해설:
- 연결 리스트는 메모리상 비연속
- 캐시 지역성 낮음 → 순회 성능 느림
정답: ④
문제 15. STL
해설:
- pop_back()은 vector의 마지막 원소를 제거
- 참조는 v.back()
정답: ④
문제 16. 해시 충돌 해결
해설:
체이닝 (Chaining)
체이닝은 버킷마다 연결리스트를 두어 충돌 발생 시 뒤에 연결
대표적인 해시 충돌 해결 방식
- ① 선형 탐사: 충돌 시 한 칸씩 앞으로 이동
- ② 제곱 탐사: 일정 간격으로 띄워 탐사
- ④ 이중 해싱: 두 개의 해시 함수 사용
정답: ③
문제 17. 알고리즘
해설:
- 의사결정 트리(Decision Tree)는 시각화가 쉬운 대표적 알고리즘
- 로직 흐름, 조건 분기 등 모두 트리 형태로 명확히 표현됨
정답: ③
문제 18. 최소신장트리
해설:
- 크루스칼: 여러 정점을 서브트리(집합)로 보고, 사이클을 피하면서 가장 가중치가 낮은 간선을 선택 → 두 집합을 하나로 합침
- 프림: 하나의 정점에서 시작해서, 트리에 인접한 가장 짧은 간선을 하나씩 추가해 가는 방식
- 프림 알고리즘은 서브그래프를 병합하지 않음
정답: ②
문제 19. A* 알고리즘
해설:
f(n) = g(n) + h(n)
- g(n): 시작점부터 현재까지 비용
- h(n): 휴리스틱 값 (현재 → 목표 예상 비용)
A - C - E - G 까지 간선의 가중치를 합하면 25, G의 휴리스틱 값 80
더하면 105
정답: ③
문제 20. 선형보간
해설:
a*(1 - t) + b*t (0 ≤ t ≤ 0.5)
b*(1 - t) + c*t (0.5 ≤ t ≤ 1)
→ 단, 2구간에 나눠서 각각 독립적인 t를 적용해야 하므로
보통 내부적으로 t2 = t * 2 또는 (t - 0.5) * 2로 변형
정답: ②
문제 21. 검색 알고리즘
해설:
- 항상 중간값(mid)을 기준으로 범위를 절반씩 좁힘
- 정렬된 배열에서 사용되는 전형적인 이진 탐색
정답: ①
문제 22. 자료구조
해설:
- 자식 노드가 4개 → 2D 공간에서 구역을 4 분할하는 쿼드 트리 구조
- 옥트리는 3D에서 8개로 나뉘며 nodes[8]이 필요
정답: ②
문제 23. 추천 시스템
해설:
콘텐츠 기반 필터링 (Content-Based Filtering)
사용자의 관심 콘텐츠와 유사한 콘텐츠 추천
사용자 프로필 기반
과거 정보에 기반 → 새로운 경험 부족, 편향성 있음
- ① 장바구니 분석: 연관 규칙 (e.g. A사면 B도 삼)
- ③ 협업 필터링: 유사한 사용자 행동 기반
- ④ CNN: 딥러닝 모델 (추천 방식 아님)
정답: ②
문제 24.
해설:
네비게이션 그래프 (Navigation Graph)
게임 AI에서 길 찾기 용도로 사용
각 노드는 지역/지점, 간선은 연결 경로
경로 탐색 알고리즘(A*, 다익스트라 등)과 함께 사용
- ① 옥트리: 공간 분할
- ② 쿼드 트리: 2D 공간 분할
- ④ 비헤이비어 트리: 행동 결정 트리
정답: ③
문제 25. 알고리즘 탐색법
해설:
최소최대 트리 탐색 (Minmax Tree Search)
MAX는 자기에게 최대 이익을
MIN은 상대에게 최소 이익을 주는 선택
게임 트리의 기본
- ② 알파-베타 가지치기: Minmax 최적화
- ③ 몬테카를로: 확률 기반 시뮬레이션
- ④ 이진트리 탐색: 정렬 트리 탐색
정답: ①
게임 콘텐츠 프로그래밍
문제 1. 행렬
해설:
단위행렬 (Identity Matrix)
주대각선이 모두 1, 나머지 0인 정방행렬
행렬 곱 연산에서 항등원 역할
A * I = A
- ① 위삼각행렬: 대각선 위쪽에만 값있음
- ② 아래삼각행렬: 대각선 아래쪽에만 값있음
- ④ 45도 회전행렬: 회전 변환 용도 (sin, cos 포함됨)
정답: ③
문제 2. 행렬
해설:
역행렬
- ① 단위행렬: 항등원
- ② 곱셈행렬: 일반 연산
- ④ 전치행렬: 행/열 전환
정답: ③
문제 3. 벡터 연산
해설:
내적 A·B = |A||B|cosθ
θ가 90° 이상이면 cosθ < 0 → 내적 음수→ 둔각
- ② > 0 → 예각
- ③ = 0 → 직각
정답: ①
문제 4. 벡터 연산
해설:
Rim Light는 실루엣 강조 → 카메라 방향과 법선 벡터의 관계 중요
- 법선 벡터(N)와 시선 벡터(V)의 내적
- N·V가 작을수록 실루엣에 가까움 → Rim Light 강조
정답: ④
문제 5. 좌표계
해설:
한 점 P를 세 가지 값으로 표현:
- r: 원점에서의 거리 (반지름)
- θ (세타): z 축과의 각도 (보통 0 ~ π)
- φ (파이): x축 기준 수평면에서의 각도 (보통 0 ~ 2π)
① 직교 좌표계 (x, y, z)로 표현 각도 없이 좌표만 사용 ③ 등차 좌표계 일반적으로 쓰이지 않는 용어 혼동 유도 distractor ④ 원기둥 좌표계 (r, φ, z) → z는 그대로 유지 θ는 없음 → 구면과 다름
정답: ②
문제 6. 호도법
해설:
호도법 변환 공식
정답: ②
문제 7.
해설:
톤 매핑 (Tone Mapping)
Tone Mapping: HDR(1.0 이상 밝기)을 **LDR(0~1)**로 압축
게임 후처리 효과에서 중요
- ① Bloom: 밝은 부분 번짐 효과
- ② Gamma Correction: 감마 밝기 보정
- ④ Ray Tracing: 광선 기반 렌더링 방식
정답: ③
문제 8. 렌더링
해설:
디퍼드 렌더링 (Deferred Rendering)
해설:
- 디퍼드 렌더링은 조명 정보를 G-buffer에 저장 후
- 최종 합성 단계에서 계산
① Forward Rendering: 전통 방식, 객체별 조명 계산
② Photon Mapping: 간접조명용
④ Ray Tracing: 광선 추적 기반
정답: ③
문제 9. Blur
해설:
Gaussian Blur - 가우시안 필터를 이용한 흐림 효과
가장 널리 쓰이는 Blur 방식
- ② Radial Blur: 중심 기준 회전 흐림
- ③ Ambient Occlusion: 음영 처리 기법
- ④ DOF (Depth of Field): 거리 기반 흐림 (Blur는 결과일 뿐, 방식은 아님)
정답: ①
문제 10. 텍스처
해설:
Light Mapping -정적인 조명 정보를 Light Map에 저장
Diffuse와 곱하여 조명 효과 있는 텍스처 구현
- ① Normal Mapping: 표면 굴곡 표현
- ② Diffuse Mapping: 기본 표면 색상
- ③ Ray Tracing: 실시간 조명 계산
정답: ④
문제 11. 좌표계
해설:
- 오른손 좌표계에서 피치 (Pitch)는 X축 회전
정답: ①
문제 12.
해설:
- 태양은 멀리서 한 방향으로 빛을 줌 → Directional Light
- Spot Light는 원뿔 형태로 제한된 범위를 비춤
정답: ②
문제 13. 방향벡터
해설:
cosθ
- A·B = |A||B|cosθ
- 내적 결과가 클수록 → 두 벡터 방향 유사 (시야 안에 있음)
- cosθ > 0이면 전방
정답: ④
문제 14. 곡선 처리 기법
해설:
Spline - 여러 점을 부드러운 곡선으로 연결
- ② Ray: 직선 (광선 추적)
- ③ Line: 직선
- ④ Plane: 평면
정답: ①
문제 15. 모션 트래킹
해설:
- 센서 좌표 → 게임 좌표 변환 시 일반적으로 변환 행렬이나 좌표계 보정 매트릭스를 사용
- 투영행렬의 역행렬은 클립 공간 → 뷰 공간 변환용이므로 사용 위치가 다름
정답: ④
문제 16. 높이맵 기반 지형 생성
해설:
흑백 이미지의 픽셀 밝기값으로 높이를 정함
보통 0~255 범위의 값 사용
- ① 탄젠트 함수 사용 아님
- ③ 광원 거리는 조명 처리용
- ④ 폴리곤 노출도는 Ambient Occlusion 개념
정답: ②
문제 17. 애니메이션
해설:
스키닝 (Skinning)
스키닝은 정점에 가중치를 부여해 여러 본(bone)의 영향을 받게 함
관절 부위 찢어짐 현상 방지
- ① 모션 리타겟팅: 애니메이션 재적용
- ② 모션 빌더: 소프트웨어 이름
- ④ 모핑: 형태 변화 애니메이션
정답: ③
문제 18. 정점 셰이더
해설:
- 정점 셰이더: 주로 위치, 애니메이션, 스킨 처리
- 블러는 픽셀 셰이더(Post Effect)에서 처리
- 조명 계산 가능
- 텍스처 좌표 애니메이션 가능
- 캐릭터 애니메이션 (스키닝) 가능
정답: ④
문제 19. 공간 변환
해설:
투영 공간 (Projection Space)
View Space → Projection Space로 변환 후
정규화된 장치 좌표 → 화면으로 출력됨
- ① 물체 공간: 로컬 좌표
- ③ 월드 공간: 전체 세계 기준 좌표
- ④ 광원 공간: 그림자 계산 시 사용
정답: ②
문제 20. 렌더링 처리
해설:
컬러 그레이딩은 색상 보정 LUT(Texture)를 사용
Z-buffer는 깊이 정보 저장용이며 관련 없음
- ② DoF는 심도 기반 블러
- ③ 모션 블러는 포스트 이펙트
- ④ 멀티 패스 렌더링은 여러 번 렌더링 후 조합
정답: ①
문제 21. 광원
해설:
Point Light (점광원)
- 한 점에서 빛이 모든 방향으로 퍼짐
- 각 위치에서 빛의 방향이 달라짐
- 위치에 따라 조도 및 각도 θ가 달라짐
- ① Ambient Light는 모든 물체에 균일하게 적용되는 기본 조명
- ② Directional Light: 태양처럼 멀리서 오는 평행광
- ④ Spot Light: 원뿔형 방향성 조명
정답: ③
문제 22. 충돌처리
해설:
- 삼각형과 Ray의 충돌은 수학적으로 계산 가능
정답: ③
문제 23. 버퍼
해설:
프레임 버퍼- 렌더링 결과인 픽셀 색상값을 저장
최종적으로 모니터에 출력되는 이미지 저장소
- ① 인덱스 버퍼: 정점 재사용을 위한 인덱스 정보
- ③ 스텐실 버퍼: 마스킹, 조건부 렌더링
- ④ 깊이 버퍼(Z-buffer): 픽셀 깊이 정보 저장
정답: ②
문제 24. 물리 기반 셰이딩
해설:
프레넬 효과 - 시선 각도에 따라 반사가 강해짐
매끄러운 금속, 플라스틱 표면에서 강하게 나타남
입사각이 작을수록 반사 강도 증가
- ① Diffuse: 난반사
- ② Ambient: 환경광
- ④ Emissive: 자체 발광
정답: ③
문제 25. 애니메이션
해설:
키프레임 - 애니메이터가 지정한 주요 포즈
중간 프레임은 자동 계산 (보간)
Unity, Maya, Blender 등에서 일반적 방식
- ① 계층적 애니메이션: 부모-자식 구조
- ② 정점 애니메이션: 프레임별로 정점 위치 저장
- ④ 스키닝: 뼈대+가중치로 애니메이션 처리
정답: ③