[게임프로그래밍전문가] 2011년 제 2회 A형
시험 정보
- 시험: 게임프로그래밍전문가
- 회차: 2011년 제 2회 A형
게임 제작 개론
문제 7
문제
다음이 설명하고 있는 온라인 게임분류로 옳은 것은?
1978년도 유닉스 시스템의 채팅기능에다 보드형 RPG가 접목된 형태로 시작되었다. 게임형식이 발전되면서 그래픽이 아닌 대화기능을 위주로 RPG나 어드벤처, 또는 두 가지를 혼합한 형태인 온라인 게임으로 발전되었다.
보기
① MPOG ② MMORPG ③ 액션게임 ④ 머드게임
내 답: 2
정답: 4
오답 노트
머드(MUD, Multi-User Dungeon)게임은 텍스트 기반의 온라인 RPG로, 1970년대 후반 유닉스 환경에서 시작되었다. 그래픽이 아닌 대화(텍스트) 기반이라는 점이 핵심 키워드이다.
문제 9
문제
다음 게임 제작과 관련된 설명 중 옳은 것은?
보기
① 모듈화 : 독립적으로 테스트되고 최적화되며, 시스템 내의 다른 시스템에 영향을 주지 않으며 대치될 수 있는 완전히 캡슐화 된 모듈로 프로젝트를 분리하는 것이다.
② 추적 가능성 : 모듈이 상호의존하지 않고 각각이 자유롭도록 아키텍처를 만드는데 있어서 필요한 것은 높은 신뢰도이다.
③ 재사용성 : 프로젝트 계획은 아키텍처로부터 직접적으로 추출된다.
④ 안정성 : 모듈은 확장성이 있고 이식가능해서 다른 프로젝트에도 삽입될 수 있도록 디자인 되어야 한다.
내 답: 3
고른 이유: 옳지 않은 것을 고르는 걸로 봐서 가장 옳지 않아 보였던 3번을 골랐다.
정답: 1
오답 노트
①번 모듈화의 설명이 올바르다. ②~④번은 설명과 용어가 서로 뒤바뀌어 있다. 재사용성은 ④번 내용에, 안정성/신뢰성은 ②번 내용에 가깝다.
프로그래밍 일반
문제 2
문제
분산처리 시스템의 위상(topology)에 따른 분류에서 성형(star) 구조에 대한 설명으로 틀린 것은?
보기
① 모든 동작은 중앙 컴퓨터에 의해 감시 및 제어된다.
② 터미널이 증가하면 통신 회선 수도 증가한다.
③ 각 노드는 point-to-point로 모든 노드 간 직접 연결 된다.
④ 한 노드가 고장 나도 다른 노드에는 영향이 없다.
내 답: 4
정답: 3
오답 노트
성형(star) 구조에서는 모든 노드가 중앙 허브에 연결될 뿐, 노드 간 직접 연결되지 않는다.
“모든 노드 간 직접 연결”은 완전 연결형(Mesh) 구조의 특징이다.
④ 한 노드 고장 시 다른 노드에 영향 없다는 것은 성형 구조의 장점으로, 올바른 설명이다.
문제 11
문제
TCP/IP에 대한 설명이 잘못된 것은?
보기
① 스트림(Stream)방식의 데이터 전송방식이다.
② 전송되는 데이터의 순서가 보장되는 전송방식이다.
③ 연결지향적(Connected-Oriented)인 데이터 전송방식이다.
④ 속도가 빠르지만 데이터의 유실이 있을 수 있다.
내 답: 3
정답: 4
오답 노트
TCP는 연결지향적, 스트림 방식, 순서 보장의 특징을 가지며 신뢰성 있는 전송을 보장한다.
④번은 UDP의 특징이다. UDP는 빠르지만 데이터 유실이 있을 수 있다.
문제 19
문제
다음 중 IOCP를 이용한 서버 개발에 있어서 올바른 설명은?
보기
① IOCP는 동시에 오직 하나의 입출력을 처리할 수 있다.
② 하나의 work thread는 오직 하나의 I/O처리를 할 수 있다.
③ IOCP는 여러 개의 work thread를 관리할 수 있다.
④ I/O가 요청되면 해당 작업은 즉시 처리 완료된다.
내 답: 1
정답: 3
오답 노트
IOCP(I/O Completion Port)는 윈도우의 비동기 I/O 메커니즘으로, 여러 work thread를 효율적으로 관리하여 다수의 동시 I/O 요청을 처리한다. I/O는 즉시 완료되지 않고 완료 큐에 결과가 쌓이면 work thread가 처리한다.
문제 20
문제
다음 프로그램에서 복사생성자 호출과 거리가 먼 것은?
CMyDoc a(10); // ①
CMyDoc b(a); // ②
function1(); // ③
function2(a); // ④
보기
① CMyDoc a(10) ② CMyDoc b(a) ③ function1() ④ function2(a)
내 답: 4
정답: 1
오답 노트
- ①
CMyDoc a(10): int를 인자로 받는 일반 생성자 호출 → 복사생성자 아님 - ②
CMyDoc b(a): 동일 타입 객체를 인자로 받음 → 복사생성자 호출 - ③
function1(): 반환 시 임시 객체 생성 → 복사생성자 호출 - ④
function2(a): 값으로 전달 시 매개변수 초기화 → 복사생성자 호출
문제 21
문제
다음 프로그램의 컴파일시 오류의 원인이 되는 문장은?
Student* p = new PartTimeStd;
p->Work(); // ②
p->Study(); // ③
p->Sleep(); // ④
보기
① using namespace std; ② p->Work(); ③ p->Study(); ④ p->Sleep();
내 답: 4
정답: 2
오답 노트
p의 타입이 Student*이므로 Student 클래스에 없는 Work()는 호출 불가 → 컴파일 에러.
Study()는 Student에, Sleep()은 Person(상위)에 정의되어 있으므로 문제없다.
문제 23
문제
CPU 스케줄링과 다중프로그래밍 기법을 사용하여 여러 사용자에게 시간을 분할해서 동시에 작업할 수 있도록 하는 시스템
보기
① 다중처리 시스템 ② 분산처리 시스템 ③ 시분할 시스템 ④ 실시간 시스템
내 답: 2
정답: 3
오답 노트
시분할 시스템(Time-Sharing System)은 CPU 시간을 잘게 나눠 여러 사용자가 동시에 사용하는 것처럼 느끼게 한다.
분산처리 시스템은 여러 컴퓨터가 네트워크로 연결되어 작업을 분담하는 방식이다.
문제 24
문제
오류를 검출하는 방법에 해당하지 않는 것은?
보기
① 패리티 비트 ② CRC 코드 ③ IP 패킷 ④ 체크섬 알고리즘
내 답: 2
정답: 3
오답 노트
패리티 비트, CRC(Cyclic Redundancy Check), 체크섬은 모두 데이터 오류 검출 방법이다.
IP 패킷은 네트워크 계층의 전송 단위일 뿐, 오류 검출 방법이 아니다.
알고리즘
문제 1
문제
다음 알고리즘 중 게임에서 3차원 공간의 공간분할구조로 사용하는 것이 아닌 것은?
보기
① BSP ② Quadtree ③ Octree ④ Occlusion Horizon
내 답: 3
정답: 4
오답 노트
BSP, Quadtree, Octree는 모두 공간 분할 자료구조이다.
Occlusion Horizon은 오클루전 컬링(가려진 물체를 그리지 않는 기법)의 한 방법으로, 공간 분할 구조가 아니다.
문제 2
문제
다음 중 8진 트리(octree)에 대한 설명 중 틀린 것은?
보기
① 하나의 박스는 세 축을 따라 동시에 분할되고, 분할되는 점은 박스의 중심이 된다.
② 재귀적 반복이 최대 반복 회수에 도달하거나 박스 안에 포함된 기하 요소의 개수가 임계값보다 적어지는 경우 공간 분할을 종료한다.
③ 분할시마다 8개의 새로운 박스가 만들어 진다.
④ 공간 상의 오브젝트들은 트리의 리프 노드에 저장되는데 하나의 리프 노드에만 포함되는 오브젝트는 렌더링시 그리지 않는다.
내 답: 2
정답: 4
오답 노트
①~③은 옥트리의 올바른 설명이다.
④는 틀린 설명이다. 리프 노드에 저장된 오브젝트라도 카메라에 보이면 렌더링해야 한다. “그리지 않는다”는 표현이 잘못되었다.
문제 7
문제
A* 알고리즘을 사용하여 A에서 F까지의 최단 경로를 찾고자 한다. C 지점에 도달하였을 때 C지점에서의 평가값으로 가장 적당한 것은?

보기
① 330 ② 340 ③ 350 ④ 360
내 답: 3
정답: 2 (340)
오답 노트
A* 알고리즘의 평가함수: f(n) = g(n) + h(n)
- g(n): 시작점에서 현재 노드까지의 실제 이동 비용
- h(n): 현재 노드에서 목표(F)까지의 추정 비용(직선거리)
C 지점의 f(C) = A→C까지 실제 비용 + C에서 F까지의 직선거리 = 340
문제 11
문제
다음 중 분할정복이 사용되지 않은 알고리즘은?
보기
① 병합정렬 ② 퀵정렬 ③ 쉐이크 정렬 ④ 이진검색
내 답: 2
정답: 3
오답 노트
병합정렬, 퀵정렬, 이진검색은 모두 분할정복(Divide and Conquer) 기법을 사용한다.
쉐이크 정렬(Shake Sort)은 양방향 버블 정렬로, 교환(exchange) 기반 정렬이다.
문제 13
문제
이중 연결 목록(Doubly Linked List)의 기능별 알고리즘 복잡도로서 틀린 것은?
보기
① 데이터 삽입시 복잡도는 O(c)이다.
② 데이터 제거시 복잡도는 O(n)이다.
③ 데이터 접근시 복잡도는 O(n)이다.
④ 리스트의 끝(Tail)에 추가시 복잡도는 O(c)이다.
내 답: 1
정답: 2
오답 노트
이중 연결 리스트에서 삭제할 노드를 이미 알고 있다면, 포인터만 조작하면 되므로 O(1)이다.
O(n)은 삭제 노드를 탐색하는 비용까지 포함한 경우이다. 순수 제거 연산 자체는 O(1).
문제 16
문제
“가” 노드를 시작점으로 깊이 우선 검색(DFS)을 실시하였다. DFS에 대한 그림 설명으로 가장 적당한 것은?

보기
① 
② 
③ 
④ 
내 답: 2
정답: 1
오답 노트
DFS(깊이 우선 탐색)는 스택(또는 재귀)을 사용하여 한 방향으로 갈 수 있을 때까지 깊이 진행한 뒤 되돌아가는 방식이다. 순서는 가나다 순 기준으로 인접 노드를 탐색한다.
문제 17
문제
이진 트리의 균형을 맞추기 위해 AVL 트리를 적용한다고 할 때, AVL 트리의 어떤 상태에 해당하는가?

보기
① LL Case ② LR Case ③ RL Case ④ RR Case
내 답: ?
정답: 1 (LL Case)
오답 노트
AVL 트리의 불균형 유형:
- LL Case: 왼쪽 자식의 왼쪽에 삽입 → 우회전(right rotation)으로 해결
- LR Case: 왼쪽 자식의 오른쪽에 삽입 → 좌-우 이중회전
- RL Case: 오른쪽 자식의 왼쪽에 삽입 → 우-좌 이중회전
- RR Case: 오른쪽 자식의 오른쪽에 삽입 → 좌회전(left rotation)으로 해결
문제 18
문제
Max 힙(Heap)에서 최상의 값 25를 삭제했을 경우 자료구조는 어떤 형태로 변화가 이루어지겠는가?

보기
①
`
②
③
④
내 답: 2
정답: 4
오답 노트
Max 힙에서 루트(최댓값) 삭제 과정:
- 루트(25)를 제거한다.
- 마지막 노드를 루트로 이동한다.
- 자식 중 더 큰 값과 비교하며 아래로 내려보내는 힙 재정렬(heapify-down)을 수행한다.
문제 20
문제
a, b, c 세개의 기준선을 이용하여 하나의 공간을 네개로 분할하는 방식의 정확한 명칭은?

보기
① 쿼드트리 ② 옥트리 ③ K-D 트리 ④ PVS
내 답: 1
정답: 3
오답 노트
K-D 트리(K-Dimensional Tree)는 k차원 공간을 하이퍼플레인(기준선)으로 재귀적으로 분할하는 자료구조이다.
쿼드트리는 2D 공간을 4등분, 옥트리는 3D 공간을 8등분하는 방식과는 다르다.
문제 23
문제
위 그래프에서 A 정점으로부터 너비 우선 운행(BFS)을 수행했을 때 순서로 바른 것은?
보기
① A-B-C-D-E-F ② A-B-E-F-D-C ③ A-D-F-C-B-E ④ A-D-F-E-B-C
내 답: 2
정답: 1
오답 노트
BFS(너비 우선 탐색)는 큐를 사용하여 시작 노드에서 인접한 노드들을 순서대로(가나다 순) 탐색한다. 가중치와 무관하게 연결 관계에 따라 탐색하므로 A-B-C-D-E-F가 된다.
문제 24
문제
프림(Prim)의 알고리즘을 사용하여 A 정점으로부터 최소 신장 트리(MST)를 구할 때 선택되는 간선(Edge)의 순서로 맞는 것은?
보기
① 3-8-1-6-4 ② 3-1-4-6-8 ③ 8-3-4-6-1 ④ 8-3-1-6-4
내 답: 1
정답: 2
오답 노트
프림 알고리즘은 현재 MST에 포함된 정점들과 연결된 간선 중 가장 가중치가 작은 간선을 반복 선택한다. A에서 출발하여 매 단계 최소 비용 간선을 선택하면 3-1-4-6-8 순서가 된다.
문제 28
문제
연결 리스트(linked list)에 대한 설명으로 옳지 않은 것은?
보기
① 개념적으로는 인접하는 자료라고 생각되지만, 일반적으로 메모리 상에 흩어져 있다.
② 가상 메모리의 관리를 위해 활용되기도 한다.
③ 단일 연결 리스트(single-linked lists)는 하나의 포인터로 연결된 항목들로 구성된다.
④ 임의로 접근하는 횟수가 삽입, 삭제보다 클 경우 일반적으로 배열보다 우수한 속도를 나타낸다.
내 답: 2
정답: 4
오답 노트
임의 접근(random access)은 배열이 O(1), 연결 리스트는 O(n)이다. 임의 접근이 잦은 경우 배열이 연결 리스트보다 빠르다. ④가 틀린 설명이다.
게임 프로그램 제작
문제 2
문제
벡터의 값을 x축 방향으로 1만큼, y축 방향으로 2만큼, z축 방향으로 3만큼 이동시키는 변환을 나타내는 4x4 행우선 행렬에 대한 역행렬에서 a, b, c에 해당하는 값으로 맞는 것은?
보기
① a=1, b=2, c=3 ② a=3, b=2, c=1 ③ a=-1, b=-2, c=-3 ④ a=-3, b=-2, c=-1
내 답: 1
정답: 3
오답 노트
이동 변환 행렬의 역행렬은 이동 방향을 반대로 한 것이다. (1, 2, 3)만큼 이동하는 행렬의 역행렬은 (-1, -2, -3)만큼 이동하는 행렬이다.
문제 4
문제
행렬을 사용하는 것과 비교하여 사원수(Quaternion)를 회전 연산에 사용하는 이유로 적당하지 않은 것은?
보기
① 연산 속도가 빠르다 ② 사용되는 메모리의 양이 적다. ③ 짐벌락(gimbal lock)이 예방 된다 ④ 직관적으로 이해하기 편하다.
내 답: 3
정답: 4
오답 노트
쿼터니언은 연산 속도, 메모리 효율, 짐벌락 방지 면에서 유리하다.
단, 4개의 성분(x, y, z, w)으로 표현되어 직관적으로 이해하기 어렵다는 단점이 있다.
문제 5
문제
다음 스마트폰 게임 개발을 위한 개발 환경에 대한 설명으로 틀린 것은?
보기
① 아이폰 게임 개발을 위해 Mac Pro 노트북에 iPhone SDK, Xcode를 설치하고 Object C로 개발한다.
② 안드로이드 게임 개발을 위해 JDK, Android SDK와 Eclipse를 설치하고 Java로 개발한다.
③ 윈도우폰7에서 구동되는 게임 앱을 개발하기 위해 XNA, Visual Studio를 설치하고 C++로 개발한다.
④ 심비안 용 게임을 개발하기 위해 Active Perl과 ADT등을 설치하고 symbian C++로 개발한다.
내 답: 4
정답: 3
오답 노트
윈도우폰7 게임 개발은 XNA 프레임워크와 Visual Studio를 사용하지만, 개발 언어는 C++이 아닌 C#이다. XNA는 C# 기반의 게임 개발 프레임워크이다.
문제 6
문제
다음 중 충돌검출에 활용할 수 있는 자료구조 및 알고리즘으로 적절하지 않은 것은?
보기
① BSP 트리 ② k-DOP 트리 ③ OBB 트리 ④ AVL 트리
내 답: 3
정답: 4
오답 노트
BSP 트리, k-DOP 트리, OBB 트리는 모두 충돌 검출에 사용되는 공간 분할/바운딩 볼륨 자료구조이다.
AVL 트리는 자기 균형 이진 탐색 트리로, 탐색/정렬에 사용되며 충돌 검출과는 무관하다.
문제 16
문제
빌보드 기법으로 폭발 이미지를 출력할 때 카메라에서 먼 순서대로 그리는 이유로 적합한 것은?
보기
① 알파 블랜딩 때문이다.
② 카메라에서 먼 곳부터 그려야지 렌더링 속도가 더욱 빠르기 때문이다.
③ D3D에서 빌보드 처리는 카메라에서 먼 곳부터 그리도록 설정이 되어 있다.
④ 렌더링 되는 빌보드 이미지의 클리핑(clipping) 영역 처리를 위한 계산 때문이다.
내 답: 4
정답: 1
오답 노트
알파 블렌딩을 사용하는 반투명 객체는 뒤에서 앞 순서(back-to-front)로 그려야 올바른 합성 결과가 나온다. 가까운 것을 먼저 그리면 뒤 픽셀이 이미 그려진 픽셀과 올바르게 블렌딩되지 않는다.
문제 18
문제
다이렉트 3D의 렌더링 파이프라인에서 셰이더 모델 2.0에서 텍스처의 값을 읽어 들여 처리하게 되는 부분은?

보기
① a ② b ③ c ④ d
내 답: 1
정답: 4
오답 노트
텍스처 샘플링은 픽셀 셰이더(Pixel Shader) 단계에서 수행된다. 파이프라인 순서상 정점 셰이더(a) → 래스터라이저 → 픽셀 셰이더(d) 순이며, 텍스처를 읽어 색상을 결정하는 것은 픽셀 셰이더이다.
문제 19
문제
다음 중 두 벡터의 외적(Cross Product) 공식을 활용하여 구할 수 없는 것은?
보기
① 삼각형의 면에 대한 법선(Face Normal)
② 정반사광(Specular Reflection Light) 계산
③ 두 벡터를 이용하여 만들어지는 평행 사변형의 넓이
④ 비행기의 옆 방향과 윗 방향을 알 때 진행 방향 구하기
내 답: 4
정답: 2
오답 노트
- ①③④는 외적으로 구할 수 있다.
- 정반사광(②) 계산은 반사 벡터 r = 2(n·L)n - L 공식으로, 내적(Dot Product)을 사용한다. 외적으로는 구할 수 없다.
문제 20
문제
다음 중 절두체 선별(frustum culling)에 대한 설명으로 맞지 않는 것은?
보기
① 바운딩 볼륨과 절두체를 비교하여 렌더링 프로세스의 속도를 향상시킬 수 있다.
② 절두체 선별은 CPU에서 수행되어 파이프라인에 들어가는 기하 구조의 수를 줄인다.
③ 8진 트리는 시각 절두체 선별에 활용될 수 있다.
④ 다각형에 정렬된 BSP 트리는 시각 절두체 선별에 응용할 수 없다.
내 답: 3
정답: 4
오답 노트
BSP 트리는 공간을 계층적으로 분할하므로 절두체와 교차하는 노드만 탐색하여 절두체 선별에 활용할 수 있다. “응용할 수 없다”는 ④가 틀린 설명이다.
문제 23
문제
현재 시점에서 멀리 있는 복잡하고 정적인 물체들을 미리 하나의 텍스처에 렌더링하여, 동일한 장면을 다시 그릴 때 이 텍스처 이미지를 활용함으로써 처리 속도를 향상시키는 기법은?
보기
① View Frustum Culling ② Potentially Visible Sets ③ Imposters ④ Fog
내 답: 2
정답: 3
오답 노트
설명하는 기법은 Imposters(임포스터)이다. 복잡한 3D 오브젝트를 미리 텍스처에 렌더링해두고, 실제 렌더링 시에는 해당 텍스처(빌보드)로 대체하여 성능을 향상시킨다.
문제 24
문제
리소스를 제작하기 위한 저작 도구를 만들 때 유의해야 할 사항과 가장 거리가 먼 것은?
보기
① 전체 컨텐츠 파이프라인을 고려한 도구의 기능
② 저작 도구의 동작환경에 멀티 플랫폼을 고려하여 개발
③ 데이터 저장 형식의 잦은 변경에 대비한 유연한 설계
④ 사용하기 편하고 직관적인 사용자 인터페이스
내 답: ?
정답: 2
오답 노트
저작 도구는 보통 특정 엔진/플랫폼에 종속적으로 개발된다. 멀티 플랫폼 지원은 최종 게임 결과물에 중요하지만, 저작 도구 자체에는 상대적으로 거리가 먼 항목이다.
문제 26
문제
버텍스 사이에 선형 보간(Linear Interpolation)을 사용하여 폴리곤을 라이팅(lighting)하는 방식은?
보기
① Texture Mapping ② Flat Shading ③ Gouraud Shading ④ Shadow Shading
내 답: 1
정답: 3
오답 노트
- Flat Shading: 폴리곤 전체에 단일 색상 적용
- Gouraud Shading: 각 꼭짓점의 색상(조명값)을 계산하고 내부를 선형 보간하는 방식
- Phong Shading: 법선 벡터를 보간하여 픽셀마다 조명 계산
- Texture Mapping은 조명 방식이 아닌 텍스처를 입히는 기법
문제 27
문제
윈도우를 만드는 순서가 옳은 것은?
보기
① WndClass등록 → CreateWindow → ShowWindow → Message Loop
② WndClass등록 → Message Loop → CreateWindow → ShowWindow
③ CreateWindow → ShowWindow → WndClass 등록 → Message Loop
④ Message Loop → WndClass 등록 → CreateWindow → ShowWindow
내 답: 3
정답: 1
오답 노트
윈도우 프로그램의 기본 생성 순서:
WndClass등록 (RegisterClassEx)CreateWindow로 윈도우 생성ShowWindow로 윈도우 표시Message Loop진입 (GetMessage/DispatchMessage)