TIL

25.11.07일자 - TIL

csh8696nb 2025. 11. 7. 17:39

코딩 테스트 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