TIL

TIL day 25

gbleem 2025. 1. 21. 21:15

TIL day 24는 개인 일정으로 쉬어서 없습니다.^^

1. 코딩 테스트


오늘 오전에는 프로그래머스의 level2 오픈채팅방 문제를 풀었습니다.

https://school.programmers.co.kr/learn/courses/30/lessons/42888

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

  • 뭘로 풀지?
    • 처음에 문제를 보고, string 처리를 잘 한 다음 unordered_map을 써서 갯수를 세면 될 것 같다는 생각을 했습니다.
    • Split 함수
      • 그러나 C++에는 split함수가 없기에, split을 할 수 있는 함수를 만들어서 해당 기능을 구현해서 문제를 해결했습니다.
        • 특정 값이 문자가 나오기 전까지 substr을 통해 잘라준 후 결과 값에 넣어준 다음
        • 해당 문자까지를 지워주는 과정을 반복하여 동작합니다.
    • vector와 unordered_map 사용 (아래 코드 참고)
      • temp 벡터
        • 100'000개의 벡터로 이루어져 있고,
        • record라는 주어진 vector를 split 한 결과를 저장하는 벡터입니다.
      • um (unordered_map)
        • key와 value 모두 string으로 구성하였고,
        • key는 "uid"이고, value는 "이름"입니다.
      • vec이라는 이름의 벡터
        • temp 벡터를 돌면서, "상태"와 "uid"를 pair로 구성하여 저장하였습니다.
        • 이때, 상태에 따라
          • "enter"라면, vec과 um에 모두 값을 update해주고
          • "leave"라면 vec에만 값을 update
          • "change"라면 um에만 값을 update 해주어야 합니다.
          • 그 이유는
            • "enter"일 때는 상태와 uid 이름이 있고
            • "leave"일 때는 상태와 uid만 존재하며
            • "change"일 때는 uid와 이름만 존재하기 때문입니다.
    • 결과적으로,
      • vec에는 record 를 돌면서, "enter"와 "leave" 일 때 uid가 순서대로 적혀 있게 됩니다.
      • 또한 um에는 uid에 해당하는 가장 마지막 까지 update된 이름(name)이 적혀있게 됩니다.
      • vec 을 순환하면서, 해당 순서에 "상태"와 uid를 통해 찾은 "이름"을 출력해주면 문제를 해결할 수 있습니다.
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;

vector<string> answer;
unordered_map<string, string> um;
vector<pair<string, string>> vec;

vector<string> temp[100'002];

vector<string> split(string input, string delimiter) 
{
    vector<string> ret;    
    long long pos = 0;    
    string token = "";    
    
    while((pos = input.find(delimiter)) != string::npos) 
    {        
        token = input.substr(0, pos);        
        ret.push_back(token);        
        input.erase(0, pos + delimiter.length());    
    }    
    
    ret.push_back(input);    
    return ret;
}

vector<string> solution(vector<string> record) 
{    
    int size = record.size();
    
    for(int i = 0; i < record.size(); ++i)
    {
        temp[i] = split(record[i], " ");
    }    
    
    //enter uid muzi
    for(int i = 0; i < size; ++i)
    {        
        if(temp[i][0] == "Enter")
        {
            vec.push_back({temp[i][0], temp[i][1]}); //정보, ID
            um[temp[i][1]] = temp[i][2]; //ID 이름
        }
        if (temp[i][0] == "Leave")
        {
            vec.push_back({ temp[i][0], temp[i][1] });
        }
        if(temp[i][0] == "Change")
        {
            um[temp[i][1]] = temp[i][2];
        }                         
    }
    
    for(int i = 0; i < vec.size(); ++i)
    {
        string answerStr = "";
        answerStr += um[vec[i].second];
        
        if(vec[i].first == "Enter")
        {            
            answerStr += "님이 들어왔습니다.";
        }
        else
        {
            answerStr += "님이 나갔습니다.";
        }
        
        answer.push_back(answerStr);
    }    
    
    return answer;
}

2. 언리얼 공부 시작


언리얼 C++을 배우는 주차가 시작해서, 열심히 강의를 듣고 정리를 하였습니다.

  • 언리얼 기본 세팅과 폴더 구조 및 빌드과정에 대해 배웠습니다.

https://gbleem.tistory.com/44

 

Unreal Engine - 개발 환경 세팅 및 빌드 프로세스

1. 개발 환경 세팅1-1. 코드 편집기 세팅편집 -> 에디터 개인설정 -> 일반 -> 소스코드 -> 소스 코드 에디터 설정1-2. 프로젝트 내의 주요 파일.sln 파일 (솔루션 파일)C++ 소스코드와 빌드 설정이 연결

gbleem.tistory.com

  • 이후로 Actor를 C++로 만들어 보면서,
    • 에셋 마이그레이션 
    • C++ 클래스 만들기 및 삭제
    • 로그 시스템
    • Actor의 사이클 함수들 이용
    • delta time과 transform 등을 배웠습니다.

https://gbleem.tistory.com/45

 

Unreal Engine - Actor의 생성과 응용

1.  Actor 클래스 생성 및 삭제1-1. Actor와 Object 비교UObject언리얼 엔진에서 모든 클래스의 최상위 부모 클래스월드에 배치할 수 없고, 데이터나 로직만 담당할 수 있다.ex) 플레이어의 능력치, AI정보

gbleem.tistory.com

 

이번주도 화이팅 ~_~