코딩 테스트 2-3강
목표 문제에서 주어지는 입력 값을 효율적으로 제어할 수 있다.
숫자 다루기
cmath 헤더를 사용한다
반올림 하기 round()
0.5는 -에서 먼 쪽으로 반올림 한다. (away form zero)
올림 하기
ceil() ceil-천장
소수점 버리기/내림
floor()
str
문자열 스트림
stringstream
공백 기준으로 분리
분리 대상 문자열을 str
cin
string str = "123X67"
진법 변환
stringstream 조작자(hex)-16진법
stringstream (ss)
ss >> hex >> decmal =>풀이 stringstream(ss)에 있는 값을 hex(16진법)으로 해석한 후 decmal(십진법)로 변환하라 는 명령
decmalnumber; (?)
hex - 16진법 decmal - 10진법
코딩 테스트 2-4강
STL사용하기
표준 템플릿 라이브러리(STL) - 벡터, 리스트, 맵, 세트
Standard Template Library
[컨테이너, 반복자, 알고리즘 등의 사용 방법과 특성을 이해
자료구조 ? 알고리즘]
C++의 표준 라이브러리의 일부로 자주 사용되는 컨테이너와 알고리즘을 템플릿 기반으로 제공하는 라이브러리.
구성요소
컨테이너 - 데이터를 저장하고 관리하는 객체
vector, map, list 등이 있다
알고리즘 - 컨테이너에 저장된 데이터를 처리하는 다양한 함수를 제공
sort(), next_permutation
오름차순 정렬, 순열찾기
반복자 - 컨테이너의 요소들을 순회하고 접근하는 방법을 제공. 포인터와 유사하게 동작한다.
컨테이너와 알고리즘이 서로 독립적으로 작동하도록 연결해 주는 것.
순방향 반복자, 역방향 반복자
순방향 반복자 - 컨테이너의 요소들을 '앞에서부터' 차례로 순회하며, 각 원소에 접근할 수 있는 반복자
맨 처음 위치는 begin()으로, 마지막 원소 다음 위치는 end()로 접근할 수 있다.
반복자가 가리키는 곳을 읽거나 수정할 수 있다.
++연산자는 지원하고, --연산자는 지원하지 않는다.
역방향 반복자 - 컨테이너의 요소들을 '뒤에서부터' 순회하며 각 원소에 접근할 수 있는 반복자.
rbeegin()은 마지막 요소를, rend()는 첫번째 요소 바로 앞 위치를 가리킨다.
++, -- 연산자를 모두 지원하므로 양방향으로 이동이 가능하다.
벡터 - 배열과 매우 유사한 컨테이너이지만 크기를 동적으로 조절할 수 있다는 차별점이 있다.
데이터를 순차적으로 저장하며, 인덱스를 통해 특정 위치의 원소에 쉽게 접근할 수 있다. <vector>헤더 파일을 포함해야 한다.
벡터의 선언 및 초기화
선언 방법 - vector<DataType> name;
DataType은 int, double 와 같은 자료형이다. name은 벡터의 이름
초기화 하는 방법
vector<int> vec 와 같이 기본 생성자를 활용. 이때 벡터의 크기는 0이다.
vector<int> vec = {1, 2, 3} 선언과 동시에 초기 값을 직접 지정한 예시.
vector<int> v2 = v1 기존 백터의 모든 요소를 복사하는 예시. (v1의 내용을 v2로 복사)
vector<int> v(5, 10) 10으로 초기화 된 크기가 5 인 벡터를 생성한 예시.
벡터의 원소 변경 []연산자 사용가능
v[idx]는 idx번째 원소에 나타낸다. (인덱스는 0부터 시작함에 유의)
v.push_back() v.pop_back()
유의할 점 내부 동작이 배열 기반으로 구성되어 있다. 자주 중간 삽입을 이용한다면 deque 콘테이너를 이용하는 것을 고려할 만 하다.
원소 개수가 내부 용량을 넘으면 메모리 재 할당을 하고 이 과정의 시간 복잡도는 O(n) 이기에 reserve() 메서드를 활용하여 미리 메모리를 확보하는 것이 재할당을 예방할 수 있는 방법이다.
size - 실제 크기 capacity - 메모리가 할당된 크기
vec.reserve - 벡터 사이즈 선언
일반적으로 테스트에서 사용될 용량의 크기를 제시해 주므로 크기를 미리 선언해 주는 것이 유리하다.
set - 중복되지 않는 원소들을 정렬된 상태로 저장하는 컨테이너
set<DataType> name - 선형 구조가 아니라 (레드블랙)트리 구조로 구성된다.(알고만 있으면 된다)
삽입은 insert() 삭제는 erase() 에서드를 각각 사용한다.
셋의 원소를 변경하려면 기존 원소를 삭제하고, 새로운 값을 삽입하는 방식으로 처리해야 한다. 삽입=삭제=전체 변경 연산의 시간복잡도=O(logN)
정렬된 상태를 유지하면서 중복된 값을 저장하려면 multiset 을 사용해야함 - 테스트에서는 이것까지 사용해야 하는 문제를 주지는 않는다.
unordered_set
hash-데이터를 정렬하지 않는 방법
set - unordered_set - vector중 어떤 컨테이너를 써야 할 지 구분할 줄 아는 것이 필요하다.
맵(map)은 키(key)와 값(value)을 쌍으로 갖는 연관 컨테이너 중복 키를 허용하지 않고 키를 기준으로 데이터가 오름차순 정렬된다.
셋-값의 오름차순 맵 키-값 오름차순
map<KeyType, ValueType> m
키 타입, 값 타입, 맵의 이름
키가 없는데 값을 지정하면 키-값 쌍을 생성한다.
insert() 이미 키가 있다면 무시된다.
make_pair 를 써주는 게 정석이지만 {}를 넣어두면 알아서 페어구나 하고 인식해서 정상 작동한다.
Test.insert(make_pair(1,"Apple")) Test.insert({1,"apple"}) Test[1]=Apple
셋은 같게 동작한다.
.first 는 키 값을 .second 는 값을 출력한다.
at() 은 키가 없으면 예외가 발생한다. - 없는 키를 생성하지 않는다.
insert() 는 중복된 키를 할당하려고 하면 무시된다.
*알고리즘
sort()
first - [ 포함한다 last - ) 포함하지 않는다. first<= x <last
sort(first, last)
sort(first, last, comp) comp - 비교함수(핀같은 개념)
operator< a<b
*comp()
& - 래퍼런스 => const x &
find()
it *을 앞에 붙여줘야 값이 나오고 그렇지 않으면 이 값이 저장된 실제 위치가 출력된다.
unique() 범위 내에서 연속된 중복 요소를 제거한다. 실제로 컨테이너 내에서 원소가 제거되는 게 아니라 뒷 원소를 앞으로 덮어 씌워 재 배열 한다.
밀려난 값이 밀리기 전 값과 일치하지 않을 수 있다.
str(ing) - 문자열 int(eger) - 정수 cout - 변수값을 출력하는 명령어
언리얼 1-11 은 어제자 내용에 합병.
===============================================================================================
캠프 튜터님의 라이브 세션
-여러분이 생각한 것들이 대부분 정상적인 상황이다.
-걱정을 기대로 바꿀 수 있는 내용이었으면 좋겠다.
-캠프 기간이 길다. 사상누각 이니 마음을 잘 잡고 진행해야 캠프를 이어갈 수 있을 것 같다.
언리얼 개발자는 어떤 일을 하는가?
1 엔진을 왜 쓰는가?
헬블레이드 트레일러 영상
-보여지는 게 꽤 중요하다.
-DirectX 부품을 하나씩 조립하듯 그래픽API로 직접 구현해야 했다. GUI기반의 언어(?)
-윈도우 핸들 받아오기 > 그래픽 디바이스 초기화 > 버퍼 만들기> 삼각형(Vertex 3개)으로 물체 그리기 > 텍스처 좌표 계산해서 색 입히기
이렇게 해야 가능 했다.
mfc 프로그래밍 과 연관이 있다.
엔진을 사용하면 훨씬 쉽게 기본(시점, 캐릭터, 조명 등)을 가지고 응용해서 게임을 제작할 수 있게 된다.
그래픽은 조명과 감정이다.
소리, 그래픽, 무대
감정 값을 이용해서 (공격 속도, 진동 세기, 카메라 흔들림 등) 예술적으로 만들 수 있다.
시각적으로 즉각 테스트가 가능하다는 강점이 있다.
-재미가 중요하다고 생각하심.
2 실무는 어떤가?
6가지 길드(분류)
게임 플레이 프로그래머 -메인이다.
플레이와 관련된 것들을 총괄(?)하는 사람
기획자가 하는 것들과 어느 정도 겹친다. (기술에 대한 규칙/ 데미지, 쿨타임 등)
2. TA(테크니컬 아티스트)
이펙트를 최적화 할 수 있는 사람 쉐이더 파티클 후처리 등을 이용해 용량 최적화 하는 예시.
3. 엔진 프로그래머
차를 튜닝하는 예시. 엔진을 마개조 하는 사람들
엔진을 수정(튜닝) 하는 사람 우리는 다루지 못한다(안 될꺼 같아 보임)
4. 툴 프로그래머
확장 기능을 만들어 주는 프로그래머
예시 - 숲 자동 생성 브러시
5. AI 프로그래머
움직이는 것들에게 생각과 영혼이 있어 보이게 만들어 주는 사람들
블루 프린트를 쓰기도 하지만 C++을 직접 사용해서 복잡한 판단 로직을 설계하기도 한다.
6. 레벨 디자이너/ 아티스트
프로그래밍은 부족해도 에디터는 잘 사용할 줄 알아야 한다.
3 그 외에 언리얼 엔진이 사용되는 산업
자동차 산업, 건축&인테리어, 디지털 휴먼
실시간 3D기술
4 실무
절망편
점프가 안됨 블루프린트 뜯어봤는데 문제없음>캐릭터 애니메이션 파일에도 문제없음> C++코드를 봐도 모르겠음>TA에게 물어봤는데 모르겠다고함>캐릭터 신발 바닥의 물리 값이 0이 되어 있어서 안 됬음.
희망편
아무튼 마지막에 발견한 중력 물리 값 0을 9.8로 되돌리니 해결됨
5 만들고 싶은 것이 꼭 있었으면 좋겠다.
결국 rpg 이지 않을까?
문서화 할 수 있다면 더욱 좋다.
욕구를 동기부여로 삼을 수 있는 것이 베스트다!
질의응답
-분반은 레벨 테스트로 나눠진다.
분반 강의는 줌으로 녹화되기 때문에 실시간 참여만 못하는 거니 너무 우려할 필요는 없다.
분반도 시간이 지난 후에 한다.
'TIL' 카테고리의 다른 글
| 25.11.11일자 - TIL (0) | 2025.11.11 |
|---|---|
| 25.11.10일자 - TIL (0) | 2025.11.10 |
| 25.11.06일자 - TIL (0) | 2025.11.06 |
| 25.11.05일자 - TIL (0) | 2025.11.05 |
| 25.11.04일자-TIL (0) | 2025.11.04 |