게임프로그래밍 방법론
문제 1. 형 변환
해설:
- static_cast는 기본 타입 간 변환(int → float 등)에 사용.
- const_cast는 const 제거에 사용.
- dynamic_cast는 다형성 클래스 포인터 간 변환에 사용.
- reinterpret_cast는 비트 단위 해석 변경에 사용.
정답: ②
문제 2. 기능
해설:
- Lambda: C++11에서 도입된 익명 함수 표현식
- auto: 타입 추론 (C++11)
- coroutine: C++20에서 도입된 비동기 처리
- functor: 연산자 오버로딩을 통한 함수 객체 (구현 패턴)
정답: ①
문제 3. 출력결과
해설:
코드 흐름대로 내려오면 num = 0이고
ODD에서 후위 연산자이기 때문에 출력 이후 값 증가, 출력: 0, num =1
EVEN에서는 전위 연산자이기에 값 증가 후 출력. 출력: 2 , num = 2
if 문에서 num은 2이기 때문에 다시 EVEN으로 감. 출력 3, num = 3
다시 내려오면 if문의 조건에 포함이 안되기 때문에 종료.
0,2,3 출력
정답: ②
문제 4. 객체지향프로그래밍
해설:
객체지향의 4대 특징:
- 추상화
- 캡슐화
- 상속
- 다형성
템플릿은 제네릭 프로그래밍 기법, 객체지향 개념은 아님.
정답: ③
문제 5. 출력 결과
해설:
- int& a: 참조 전달 → x가 직접 수정됨 → x = 2
- int* b: 포인터 → b += 1 → b가 y[1] 가리킴 → *b = 2
- z = 2 (a) + 2 (*b) = 4
이때 int & a는 참조를 전달해서 x가 직접 수정되어 2,
int*b는 포인터로 b가 y를 가리켜 b는 이동했지만 y[0]의 값은 변함없이 1,
z= 4
정답: ③
문제 6. 함수 선언
해설:
- 식별자 이름이 예약어이면 안 됨
- 매개변수 이름 생략 가능
- 기본값 사용 가능 (a = 1)
- 함수 이름은 _, 숫자, 문자로 가능
friend는 예약어.
정답: ④
문제 7. IP
해설:
- IPv4: 32비트 (4바이트)
- IPv6: 128비트 (16바이트)
- 127.0.0.1: 자기 자신
- A 클래스: 1.0.0.0 ~ 126.255.255.255, 호스트 많음
정답: ②
문제 8. 출력 결과
해설:
- char str[] = "12345"; → null 포함해서 6바이트
- sizeof(str) → 6
- strcpy(str, "abc") → "abc\0"으로 변경됨
- 출력: 6abc
정답: ②
문제 9.
해설:
- a는 A* 타입이지만, new C를 통해 C 인스턴스를 가리킴
- getName()은 가상 함수이므로 C::getName() 호출
- 출력은 "C"임
정답: ④
문제 10. 열거형
해설:
enum에서 기본값은 0이고 초기화가 된 경우, 이전 값 기준 자동 증가
정답: ②
문제 11. C언어 헤더파일
해설:
- 헤더 파일은 코드 재사용 및 선언 공유를 위해 사용
- 종속성이 있다면 포함 순서 중요 (정의 순서 위반 시 컴파일 에러)
정답: ③
문제 12. C언어 매크로
해설:
- #define NAME → 값 없이도 정의 가능
- 조건부 컴파일 등에 사용됨
정답: ④
문제 13. C언어 매크로
해설:
풀어서 적어보면 multi(2+1 * 5+1)이기 때문에 연산자 우선순위대로 계산하면
1*5 = 5 +2 + 1 =8
정답: ①
문제 14. 메모리 영역
해설:
- Data 영역은 초기값이 있는 전역변수와 static 변수 저장됨
- Heap: malloc/free 동적 할당
- Stack: 함수 호출 시 지역 변수
- Code: 기계어 명령 저장
정답: ②
문제 15. 포인터
해설:
2,3번은 포인터 주소 자체를 바꿔서 영향이 없고
4번은 &a는 주소의 주소기 때문에 잘못된 접근이다.
정답: ①
문제 16. C언어
해설:
- C언어의 키워드(keyword)는 언어 자체에서 미리 정의되어 있어 사용자 식별자로 사용 불가
- 예: if, else, for, int, return, void 등
정답: ④
문제 17. 포인터
해설:
- *pVal = &nTemp; → 포인터에 주소를 값으로 대입하는 오류
- 옳은 형태는: pVal = &nTemp;
정답: ③
문제 18.
해설:
함수 내 static 변수는 정적 수명이지만 지역 범위 → 해당 함수 내에서만 접근 가능
정답: ④
문제 19. 메모리
해설:
메모리 단편화
- 다양한 크기의 메모리를 할당/해제 반복
- 전체 공간은 남아 있지만, 큰 연속 공간이 없어서 할당 실패
- 두 종류:
- 외부 단편화: 연속 공간 부족
- 내부 단편화: 할당 단위보다 적게 사용되어 낭비
메모리 구역화: 메모리를 코드, 데이터, 스택, 힙 등으로 나누는 개념.
가비지 컬렉션: 시스템이 자동으로 더 이상 참조되지 않는 객체를 정리(c언어에서는 없음)
메모리 초기화: malloc이나 calloc으로 할당된 메모리 공간을 0 또는 특정 값으로 채우는 것.
정답: ②
문제 20. 알맞은 코드
해설:
결괏값이 100이 되려면 1~ 19까지 홀수들의 합을 더하면 100이 나옴.
따라서 홀수만 더하기 위해서 짝수인 경우는 건너뛰고
19까지의 홀수만 더해야 하니 i가 20보다 크면 빠져나오기
- ㉠: continue; → 짝수는 건너뜀 (홀수만 더함)
- ㉡: break; → i > 20이면 루프 종료
정답: ①
문제 21. 시프트
해설:
- 1 << n은 2의 n제곱을 의미
- 1 << 7 = 2⁷ = 128
- 1 >> n은 2의 n제곱으로 나눈 값.
정답: ①
문제 22. 문자열 크기
해설:
한글은 2바이트로 계산함. 따라서 1245는 4바이트, 삼육 4바이트, 널문자 1바이트
총 9바이트
정답: ④
문제 23. 출력 결과
해설:
- FuncAdd에서 Value는 값 전달 (Call by Value) → 원본 값에 영향 없음
- Value는 변하지 않음
정답: ③
문제 24. 포인터 선언
해설:
포인터 선언 문법: 반환형 (*포인터이름)(매개변수 목록);
정답: ②
문제 25. 동기화 객체
해설:
인터럽트 - CPU 예외 처리 알고리즘
크리티컬 섹션
- 커널 개입 없이 유저 모드에서만 동작 가능
- 매우 빠르고 간단
- 단점: 다른 프로세스 간 공유 불가 → 동일 프로세스 내 전용
뮤텍스 - 커널 객체 사용, 다중 프로세스 공유 가능, 커널 리소스를 사용해 상대적으로 느림.
세마포어 - 커널 동기화 객체, 리소스 수 제한 가능, 프로세스 간 공유 가능
정답: ②
게임 알고리즘과 설계
문제 1. 재귀함수
해설:
- 거듭제곱 재귀함수는
- 기저조건 y==0이면 1, 재귀적으로 x * func(x, y-1)을 호출
정답: ①
문제 2. 자료구조
해설:
- 고유한 키로 빠르게 검색 → Map (Key-Value 구조)
- Map <string, Item> 형태로 이름으로 빠르게 찾을 수 있음
1번 List: 선형 탐색 필요 → 비효율적
2번 Object Pool: 메모리 재사용 구조일 뿐 검색 목적 X
4번 MultiMap: 중복 키 허용 → 고유 이름 조건에 위배
정답: ③
문제 3. 삽입 정렬
해설:
- 삽입 정렬에서 data [j]보다 m이 작으면 data [j]를 오른쪽으로 한 칸 이동
- 이후 빈자리에 m을 삽입
정답: ①
문제 4. 트리 순회
해설:
순회 방식출력 순서
전위 | 루트 → 왼쪽 → 오른쪽 |
중위 | 왼쪽 → 루트 → 오른쪽 |
후위 | 왼쪽 → 오른쪽 → 루트 |
너비 우선 | 레벨 순서 |
정답: ②
문제 5. 균형 탐색 트리
해설:
- 균형 트리의 목적은 탐색 효율성 유지 (O(log n))
정답: ④
문제 6. 유한상태기계
해설:
각 상태에서 가리키는 방향이 없으면 전이 불가능.
정답: ①
문제 7. 프림 알고리즘
해설:
- 현재 트리에 연결된 정점 중에서 가장 가중치가 작은 간선을 반복적으로 선택
- 사이클은 만들지 않음
- 우선순위 큐(또는 선택 정렬) 방식으로 구현 가능
정답: ③
문제 8. 탐색 기법
해설:
같은 레벨 순서로 탐색을 하는 기법은 너비 우선 탐색이다.
정답: ②
문제 9.
해설:
어떤 점 (x, y)를 원점 기준으로 θ(라디안)만큼 회전시키는 공식:
정답: ②
문제 10. 3차원 회전행렬
해설:
- 행렬은 짐벌락 문제를 해결하지 못함
- 사원수(Quaternion)가 이를 해결함
정답: ①
문제 11. 허프만 코딩
해설:
- 허프만 코딩은 문자 빈도 기반 가변 길이 부호화
- 허프만 트리는 비균형 트리 (문자 빈도에 따라 깊이 다름)
- 자주 나오는 문자는 짧은 코드, 드물게 나오는 문자는 긴 코드
정답: ④
문제 12. 함수
해설:
GetRandomNumber () 함수는 0,1,2를 반환한다.
GetRandomNumber* 3의 결과는 0,3,6이다.
따라서 각각 번호별로 결과는
1번 - 0,3,6
2번 - 3,6,9
3번 - 0,4,8
4번 - 0,3,3
따라서 0~8까지 표현 가능한 3번이 정답.
정답: ③
문제 13. 자료구조
해설:
- 함수 호출 시 스택 프레임(Stack Frame) 사용 → 지역변수 저장
- Linked List는 삭제 쉽고 유연함
- 트리는 일반적으로 노드 기반 연결 구조
정답: ④
문제 14. 연결리스트
해설:
- Linked List의 중간 삽입/삭제는 O(n)
- 노드를 순차 탐색하여 삽입 위치 찾기만 하면 됨 → O(n)
정답: ④
문제 15. 자료구조
해설:
- 스택과 큐는 중간 삽입/삭제 불가능
- 리스트처럼 임의 위치 접근 불가
정답: ③
문제 16. STL
해설:
- list는 연결 리스트(Linked List) 구조
- vector는 동적 배열(Dynamic Array) 구조
정답: ④
문제 17. 정렬
해설:
버블 정렬 - 하나씩 정렬하면서 오른쪽 끝에 가장 끝 원소가 오게 하는 알고리즘
선택 정렬 - 최솟값을 찾아 가장 앞으로 한 번에 위치
삽입 정렬 - 앞쪽 정렬된 영역에 삽입 위치 탐색
퀵 정렬 - 분할정복 기반, 피벗을 기준으로 나누어서 탐색한 뒤 정렬
정답: ①
문제 18. 탐색
해설:
- 이진 탐색은 정렬된 배열로도 가능
- 이진 탐색 = 이진 탐색 트리뿐만 아니라 배열에서도 가능
정답: ③
문제 19. 우선순위 큐
해설:
- 우선순위 큐는 우선순위에 따라 처리 → FIFO 아님
- 일반 큐가 FIFO
정답: ②
문제 20. 몬테카를로 트리 탐색
해설:
- MCTS는 4단계 구성:
Selection → Expansion → Simulation → Backpropagation - 보기에는 Backpropagation 단계가 빠짐
정답: ①
문제 21. 유한 상태 기계
해설:
- FSM은 단일 상태만 활성되는 구조가 일반적
- 4번의 설명은 비동기 멀티 상태 처리 → FSM 개념과 다름
정답: ④
문제 22. 완전 그래프
해설:
완전그래프(Complete Graph)의 간선 수 공식:
n은 노드의 수
56/2 =28, 28 - 그림에 있는 간선 수(7)= 21
정답: ③
문제 23. 문자열 검색 알고리즘
해설:
알고리즘 특징 시간 복잡도
Brute-force | 모든 위치 비교 | O(nm) |
Rabin-Karp | 해시 기반 비교 | 평균 O(n + m) |
KMP | 실패 함수(접두사-접미사 테이블) | O(n + m) |
Boyer-Moore | 뒤에서부터 검사 + 점프 | 평균 O(n/m), 최악 O(nm) |
정답: ②
문제 24. 시간 복잡도
해설:
- 바깥쪽 루프: O(n)
- 안쪽 루프: O(n)
→ 총 O(n²)
(삽입 정렬의 일부 변형 구조)
정답: ②
문제 25. 디자인 패턴
해설:
싱글턴 - 인스턴스를 하나만 생성하는 패턴
팩토리 - 객체 생성을 서브 클래스에 위임
커맨드 - 실행 요청을 객체로 캡슐화
스테이트 - 상태에 따라 행동이 달라지는 객체 설계
정답: ③
게임 콘텐츠 프로그래밍
문제 1. 렌더링 기법
해설:
flat shading - 면 단위 색상 처리
phong shading - 픽셀 단위 조명 계산
ray tracing - 광선 추적, 사실적인 반사 / 굴절 표현
normal mapping - 텍스처 기반 요철감 표현
정답: ③
문제 2. 텍스처
해설:
- Normal Map :
- 텍스처 RGB에 법선벡터(x, y, z) 정보를 담아 조명 계산 보정
- 표면의 요철감 표현 효과
- Diffuse Map:
- 기본 색상 정보 (알베도 컬러)
- 빛이 닿았을 때 기본 색상으로 보임
- Specular Map:
- 반사광의 강도를 결정
- 금속, 유리 등의 재질 표현에 활용
- Ambient Map:
- 주변광 표현 → 전체적인 밝기 조절
- 실시간 조명 없이 공간의 명암 표현
정답: ③
문제 3. 벡터 연산
해설:
벡터 외적은 반대 순서면 부호가 반대가 되어야 함.
정답: ④
문제 4. 역행렬
해설:
2차원 행렬
역행렬이 존재하려면 행렬식이 0이 아니어야 함.
- 만약 det(A) = 0 → 역행렬 없음
- det(A) ≠ 0 → 역행렬 존재
정답: ②
문제 5. 라디안
해설:
정답: ①
문제 6.
해설:
- Tone Mapping:
- HDR(High Dynamic Range) 이미지를 SDR/LDR로 매핑
- 디스플레이의 밝기 한계를 고려하여 눈에 보기 자연스럽게 조정
- Gray Scale Mapping:
- 색상을 흑백으로 변환 (채널 평균 등 활용)
- 밝기나 명도 보정용
- Inverse Mapping:
- 보통 텍스처 좌표에서 사용
- 출력 좌표를 기준으로 입력 좌표를 역산
- Saturation Mapping:
- 채도(Saturation) 조절을 의미
정답: ④
문제 7. 변환 파이프 라인
해설:
- 렌더링 파이프라인 주요 변환:
- 모델 → 뷰(view) → 프로젝션(projection) 순으로 변환
- (A)는 뷰 공간에서 클립 공간으로 가기 위한 변환이므로 투영 행렬
- 텍스처 좌표:
- UV 정보로, 조명/공간 변환과는 관계없음
- 법선 벡터:
- 조명 계산용
- 카메라 역행렬:
- 카메라 위치를 기준으로 뷰 변환에 사용
- (A) 위치는 뷰 → 클립이므로 해당 없음
정답: ③
문제 8. 후처리 기법
해설:
- Vignetting:
- 광학적 현상 → 화면 주변부 어두워짐
- 종종 의도적으로 사용해 분위기 연출
- Bloom:
- 밝은 영역이 흐릿하게 번지는 효과
- 광원 표현 등에서 사용
- SSAO:
- 물체 사이의 접촉 그림자 표현
- 주변광 차폐를 통해 깊이감 부여
- Color Grading:
- 전체 화면 색감 보정 → 필터 느낌
정답: ④
문제 9. 텍스처
해설:
- 큐브맵 텍스처:
- 6개의 텍스처(앞/뒤/좌/우/위/아래)를 한 번에 처리
- 환경맵핑, 반사 표현 등에 자주 사용
- 1D 텍스처:
- 텍스처가 선형(1차원) 배열
- 보간 색상용 등
- 2D 텍스처:
- 일반적인 텍스처 (이미지 파일 대부분)
- 볼륨 텍스처 (3D 텍스처):
- 텍스처가 깊이(Z)를 포함하는 3차원 구조
- 연기, 안개 등 표현
정답: ③
문제 10. PBR렌더링
해설:
외적은 방향 계산용, BRDF의 NDF 아님
정답: ④
문제 11. 관절
해설:
- 사원수 (Quaternion):
- 3D 회전 표현 방식
- 짐벌락 문제없음
- 관절 애니메이션에서 회전 조합에 유리
- 행렬 (Matrix):
- 위치, 스케일, 회전 등을 표현 가능
- 단점: 회전 누적 시 짐벌락 발생 가능
- 래스터라이저:
- 3D → 2D 화면 픽셀로 변환
- 애니메이션과 무관
- 픽셀 셰이더:
- 화면 픽셀 색상 계산 담당
정답: ②
문제 12. 정점 버퍼
해설:
- HDR 처리나 포스트 프로세싱은 픽셀 셰이더 이후 단계에서 수행
- 픽셀 셰이더 내에서 광원 계산은 가능하나 전체 HDR 효과 계산은 후처리 단계에서 이루어짐
정답: ③
문제 13. 렌더링 파이프 라인
해설:
- Projection Matrix 적용 후
- Clipping 수행 전
즉, View 공간 → Clip 공간으로 넘어갈 때, 절두체 범위 안에 있는지 검사함
정답: ③
문제 14. 렌더링
해설:
- Z-Test:
- 가까운 픽셀만 화면에 출력
- 멀리 있는 픽셀은 무시됨 (가림 처리)
- Alpha Blending:
- 반투명도 표현 (투명 물체 등)
- Color Buffer:
- 최종 출력 색상 저장
- Clipping:
- 화면 밖으로 나간 픽셀 제거 (좌표 기준)
정답: ①
문제 15. 벡터
해설:
- 법선 벡터 = 두 변 벡터의 외적
- 삼각형 두 변 A, B → A × B = 법선
- 내적은 각도 계산, 덧셈/곱셈은 방향 정보 없음
정답: ②
문제 16. 3D 렌더링 처리
해설:
- 안티 앨리어싱:
- 화면 픽셀 경계를 부드럽게 처리
- 카메라 정보와 무관 (렌더링 해상도 기반 처리)
- 퐁 조명:
- 뷰 벡터 필요 (관찰자 방향과 관련)
- 뷰 프러스텀 후면 제거:
- 카메라 시야 범위를 기준으로 객체 제거
- 빌보드:
- 객체가 항상 카메라를 바라보도록 회전 → 카메라 방향 필요
정답: ①
문제 17. 3D 렌더링
해설:
-
- FOV(Field of View)를 작게 하면 더 멀리 보이는 효과
- FOV가 클수록 왜곡 + 가까이 보임
정답: ①
문제 18. 카메라 행렬
해설:
- 직교 좌표계 구성 시,
y축 = z 축 × x축 (또는 x축 × z 축) - 외적 결과는 두 벡터에 수직인 벡터 → 새로운 축 생성 가능
정답: ③
문제 19. 픽셀 셰이더
해설:
- 1번: 픽셀 셰이더 기본 기능
- 2번:
- 조인트(관절) 계산은 CPU나 버텍스 셰이더에서 수행
- 픽셀 셰이더는 표면 렌더링에 집중
- 3번: 그림자 맵은 렌더타겟 + 깊이 버퍼 기반
→ 픽셀 셰이더에서 처리 - 4번: 역광/노출/블룸은 픽셀 셰이더 + 후처리에서 처리됨
정답: ②
문제 20. 애니메이션
해설:
- 1번 키프레임 :
- 시작/끝 프레임만 정의 → 중간은 보간(interpolation)으로 자동 계산
- 2번 스키닝:
- 뼈대와 메쉬 결합
- 관절 애니메이션에 사용
- 3번 모핑 (Morphing):
- 정점 위치를 프레임마다 저장하여 변형
- 표정, 형태 변화 등
- 4번 텍스처 애니메이션:
- 텍스처를 프레임마다 바꿔서 애니메이션처럼 보이게 함
정답: ①
문제 21. 공간 분할 기법
해설:
- OcTree:
- 3차원 공간을 8개의 하위 영역으로 나눔 (Oct = 8)
- 반복적으로 분할하여 공간 관리
- 3D 게임, 충돌 검사, 시야 검사 등에 활용
- Quad Tree:
- 2D 공간을 4개로 분할
- 맵 편집기, 미니맵, 타일 시스템 등에 사용
- BSP (Binary Space Partitioning):
- 공간을 2개의 부분으로 계속 나눔
- FPS 게임에서 시야 처리, 광선 추적 등에 사용
- PVS (Potentially Visible Set):
- 미리 시야에 보일 수 있는 오브젝트 집합을 계산
- Occlusion Culling에 활용됨
정답: ②
문제 22. 법선 매핑
해설:
- 2번 :
- 스키닝 캐릭터는 접선 공간(Tangent Space) 맵핑을 사용
- 접선 공간은 애니메이션 변형에도 잘 대응됨
- 1번: 둘 다 존재하는 법선 맵핑 방식
- 3번: RGB 값에 법선 벡터(x, y, z) 정보를 저장
- 4번: 접선 공간 맵의 기본 방향벡터는 (0, 0, 1) → 일반적으로 파란색이 많음
정답: ②
문제 23. 충돌
해설:
- 2번:
- 충돌 검사를 빠르게 하기 위해, 개별 정점 대신 구체(Sphere), AABB 등 간단한 볼륨 사용
- 성능 향상 효과 큼
- 1번 Ray Tracing:
- 사실적인 광원 시뮬레이션
- 충돌 검사로는 사용되지 않음
- 3번 은면 제거:
- 렌더링 최적화 (보이지 않는 면 제거)
- 충돌과 무관
- 4번 정점 셰이더:
- 정점 변환용, 충돌 처리와 직접 관련 없음
정답: ②
문제 24. 조명 연산
해설:
- 2번 :
- 광원 벡터 L이 일정 → 태양처럼 멀리서 빛이 평행하게 오는 광원
- 일반적으로 방향만 존재, 위치는 없음
- 1번 Ambient Light:
- 모든 방향에서 균일하게 오는 기본 광원 (그림자 없음)
- 3번 Point Light:
- 점 위치에서 모든 방향으로 퍼지는 광원 (전구, 촛불)
- 4번 Spot Light:
- 특정 방향으로 제한된 각도로 퍼지는 광원 (손전등)
정답: ②
문제 25. 애니메이션
해설:
- 2번 IK :
- 손/발 등 말단의 위치를 기준으로 관절을 자동 조정
- 예: 캐릭터 발이 지형에 맞게 닿도록 무릎과 고관절 회전 자동 계산
- 1번 FK:
- 루트(몸통)부터 끝까지 순차적으로 계산
- 자연스러운 움직임은 가능하지만, 지면과 정확한 정렬 어려움
- 3번 Ray Tracing:
- 광선 추적용, 애니메이션과 무관
- 4번 Morph Target:
- 정해진 형태로 정점을 이동 → 주로 얼굴 표정 등 정적 변형
정답: ②
'자격증' 카테고리의 다른 글
게임 프로그래밍 전문가 필기 2021 2 - A (2) | 2025.05.14 |
---|---|
게임 프로그래밍 전문가 필기 2021년 1회 - A형 (0) | 2025.05.12 |
게임프로그래밍 전문가 필기 2023년 1회 A형 개념정리 (0) | 2025.04.30 |
게임 프로그래밍 전문가 필기 2023년 2회 A형 개념 정리 (0) | 2025.04.29 |
게임프로그래밍 필기 개념정리 2024년 1차 A형 (1) | 2025.04.28 |