1. Day45

  • 알고리즘 코드카타
  • C++과 Unreal Engine으로 3D 게임 개발
  • 스탠다드 클래스
  • TA 클래스

2. CH3 - C++과 Unreal Engine으로 3D 게임 개발(Day45)

  • Chapter 3 C++과 Unreal Engine으로 3D 게임 개발(3-4)
    • 캐릭터 체력 및 점수 관리 시스템 구현하기

3. 알고리즘 코드카타

  • 푸드 파이트 대회(초기 코드)

    • 처음에는 vector f 와 vector r_f를 써서 f에 각 인덱스의 음식 갯수를 더하고 f를 역순으로 r_f에 넣어서 물의 왼쪽과 오른쪽의 음식 수량을 저장

    • 각 음식의 수량 만큼 인덱스값을 answer에 to_string()을 이용해 왼쪽 f를 입력해 넣고 ‘0’을 더한다음 오른쪽 r_f를 입력할 생각이였음

    • 그러나 굳이 vector를 안만들고 음식의 갯수를 / 2로 체크하면서 answer 에 인덱스 값을 음식 갯수만큼 넣고

    • 왼쪽이 끝나면 오른쪽에 answer값을 역순으로 복사한 temp를 만들어 answer += ‘0’ + temp

      #include <string>
      #include <vector>
      #include <iostream>
      using namespace std;
      
      string solution(vector<int> food) {
        string answer = "";
      
        int l = food.size();
        for (int i = 1; i < l; i++)
        {
            int count = food[i] / 2;
            for (int j = 0; j < count; j++)
            {
                answer += to_string(i);
            }
        }
        //temp.assign()보다 생성자에서 처리하는 것이 더 깔끔함 
        string temp(answer.rbegin(), answer.rend());
        // '0' + temp는 작동하지만 char + string이기때문에 string + string으로 통일
        answer += "0" + temp;
      
        return answer;
      }
  • 푸드 파이트 대회(개선 코드)

    • answer에 값을 추가하기 위한 2중 for문은 삭제 string(count, ‘0’ + i)로 배치할 음식의갯수만큼 한번에 입력

      #include <string>
      #include <vector>
      #include <iostream>
      using namespace std;
      
      string solution(vector<int> food) {
        string answer = "";
        int l = food.size();
      
        for (int i = 1; i < l; i++)
        {
            int count = food[i] / 2;
            answer += string(count, '0' + i);
        }
      
        string temp(answer.rbegin(), answer.rend());
        answer += "0" + temp;
      
        return answer;
      }

4. 스탠다드 클래스

  • CPU 아키텍처와 게임 루프
  • CPU 성능

5. TA 클래스

  • 머티리얼 실습(PBR재질 만들기)

6. 다음주 계획 : CH3 강의 학습, 알고리즘 문제 , 8번 과제 진행

1. Day44

  • 알고리즘 코드카타
  • C++과 Unreal Engine으로 3D 게임 개발
  • 베이직 실전 클래스

2. CH3 - C++과 Unreal Engine으로 3D 게임 개발(Day44)

  • Chapter 3 C++과 Unreal Engine으로 3D 게임 개발(3-3)
    • 아이템 스폰 및 레벨 데이터 관리하기

3. 알고리즘 코드카타

  • 가장 가까운 같은 글자(초기 코드) - 추가 개선 X

    • 가장 가까운 같은 글자(초기 코드) - 추가 개선 필요 X

    • map을 이용 m[s[i]]에 최근에 나온 문자의 위치(인덱스 : i) 저장

    • 처음 나온 문자라면 answer에 -1 입력

    • if (m[s[i]]) 로 값이 존제한다면 문자의 지금 위치에서 map에 저장된 최근에 나온 문자의 인덱스 값에서 빼준 값을 answer 에 입력(틀림)

      • m[s[i]] 은 값이없으면 0 을입력함 따라서 인덱스 0에 나왔던 문자가 다시 등장하면 인덱스 0을 반환해 이미 값이 존재하더라도 false 처리
    • 해결하기 위해 m.count(s[i]) 사용 값이 있다면 1 없다면 0을 반환해서 if문 처리

      #include <string>
      #include <vector>
      #include <map>
      
      using namespace std;
      
      vector<int> solution(string s) {
        vector<int> answer;
        map<char, int> m;
      
        for (int i = 0; i < s.size(); i++)
        {
            if (m.count(s[i]))
            {
                answer.emplace_back(i - m[s[i]]);
            }
            else
            {
      
                answer.emplace_back(-1);
            }
            m[s[i]] = i;
        }
        return answer;
      }

4. 베이직 실전 클래스

  • TUniquePtr 심화 Move Semantics
  • TUniquePtr 와 TUniquePtr&, TUniquePtr&& 차이
  • L-Value, R-Value 차이
  • TUniquePtr& == L-Value 원본을 직접 접근해서 씀
  • TUniquePtr&& == R-Value 소유권 가져갈 수 있는 상태로 받음(가져가면 원본 비워짐, 안가져가면 원본 유지)

5. 내일 계획 : CH3 강의 학습, 알고리즘 문제 집중

1. Day43

  • 알고리즘 코드카타
  • C++과 Unreal Engine으로 3D 게임 개발
  • 스탠다드 클래스
  • TA 클래스

2. CH3 - C++과 Unreal Engine으로 3D 게임 개발(Day43)

  • Chapter 3 C++과 Unreal Engine으로 3D 게임 개발(3-2)
    • 충돌 이벤트로 획득되는 아이템 구현하기

3. 알고리즘 코드카타

  • K번째수(초기 코드)
    • range - based for문으로 commands를 순회하면서 그안에서 for문으로 array의 배열을 commands대로 잘라서 temp에 넣고 sort로 정렬한 다음 temp의 배열에서 k번째 수를 answer 배열에 추가
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(vector<int> array, vector<vector<int>> commands) {
    vector<int> answer;

    for (auto& it : commands)
    {
        vector<int> temp;
        for (int i = it[0] - 1; i <= it[1] -1; i++)
        {
            temp.emplace_back(array[i]);
        }
        sort(temp.begin(), temp.end());
        answer.emplace_back(temp[it[2] - 1]);
    }
    return answer;
}
  • K번째수(추가 코드)
    • range - based for 문 하나만 commands 기준으로 순회하면서 temp 에 array를 복사해 넣고 temp를 순회하지않고 temp의 i와 j번째 구간만 정렬한다음 k번째 수를 answer에 추가
    • for문을 하나 줄일 수 있다는 장점이 있지만 기존 코드대비 for문 마다 temp에 array의 전체 배열을 복사해 넣는다는 점에서 배열이 길어진다면 효율이 좋지 못할 수있음
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(vector<int> array, vector<vector<int>> commands) {
    vector<int> answer;
    vector<int> temp;

    for (auto& it : commands)
    {
        temp = array;

        sort(temp.begin() + it[0] -1, temp.begin() + it[1]);
        answer.emplace_back(temp[it[0] + it[2] - 2]);
    }
    return answer;
}
  • 두 개 뽑아서 더하기(초기 코드)
    • 이중 for 문으로 모든 더해지는 경우의수를 구한다음 answer 에 넣고 sort로 오름차순 정리
    • 정렬된 answer 를 unique로 중복 되는 원소는 뒤로 밀고 erase로 지움
      #include <string>
      #include <vector>
      #include <algorithm>
      

using namespace std;

vector solution(vector numbers) {
vector answer;

for (int i = 0; i < numbers.size() - 1; i++)
{                       
    for (int j = i + 1; j < numbers.size(); j++)
    {
        answer.emplace_back(numbers[i] + numbers[j]);
    }
}

sort(answer.begin(), answer.end());
answer.erase(unique(answer.begin(), answer.end()), answer.end());

return answer;

}

  • 두 개 뽑아서 더하기(개선 코드)
    • set이 중복과 정렬을 자동으로 처리한다는 점을 이용해 numbers의 서로 다른 인덱스끼리의 모든 합을 set에 넣고 answer.assign을 이용해 할당
    • sort, unique, erase 과정을 assign하나로 압축
#include <string>
#include <vector>
#include <algorithm>
#include <set>

using namespace std;

vector<int> solution(vector<int> numbers) {
    vector<int> answer;
    set<int> s;

    for (int i = 0; i < numbers.size() - 1; i++)
    {                       
        for (int j = i + 1; j < numbers.size(); j++)
        {
            s.emplace(numbers[i] + numbers[j]);
        }
    }

    answer.assign(s.begin(), s.end());

    return answer;
}

4. 베이직 실전 클래스

  • System 객체 활용 계획 레포트 제출

5. 프로파일러 CI/CD 특강

  • .pdb파일에 디버깅 기록이 있어서 배포때는 제외해야함
  • 디버깅 팀 및 Profilling
    • Assertion
      • check : 거짓이면 치명적으로 중단 배포 버전에선 꺼짐
      • verify : check와 기본 동작은 같으나 배포 버전에서도 작동
      • ensure : 거짓 이여도 로그/콜스택 남기고 계속 진행
    • Profiler
      • Stat : 콘솔에서 Stat 명령어(FPS, UNIT, Game, CPUStalls, GPU 등)로 사용
      • Unreal Insights Frontend : Trace 활성화로 사용
      • Profiling Macro Functions : CPU 시간 측정(stat 콘솔 용), CPU 이벤트 마커(Unreal Insights 용), 태그별 메모리 추적

6. 내일 계획 : CH3 강의 학습, 알고리즘 문제 집중, 베이직 실전 클래스 과제 제출

+ Recent posts