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을 통해 잘라준 후 결과 값에 넣어준 다음
- 해당 문자까지를 지워주는 과정을 반복하여 동작합니다.
- 그러나 C++에는 split함수가 없기에, split을 할 수 있는 함수를 만들어서 해당 기능을 구현해서 문제를 해결했습니다.
- 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와 이름만 존재하기 때문입니다.
- temp 벡터
- 결과적으로,
- 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++을 배우는 주차가 시작해서, 열심히 강의를 듣고 정리를 하였습니다.
- 언리얼 기본 세팅과 폴더 구조 및 빌드과정에 대해 배웠습니다.
Unreal Engine - 개발 환경 세팅 및 빌드 프로세스
1. 개발 환경 세팅1-1. 코드 편집기 세팅편집 -> 에디터 개인설정 -> 일반 -> 소스코드 -> 소스 코드 에디터 설정1-2. 프로젝트 내의 주요 파일.sln 파일 (솔루션 파일)C++ 소스코드와 빌드 설정이 연결
gbleem.tistory.com
- 이후로 Actor를 C++로 만들어 보면서,
- 에셋 마이그레이션
- C++ 클래스 만들기 및 삭제
- 로그 시스템
- Actor의 사이클 함수들 이용
- delta time과 transform 등을 배웠습니다.
Unreal Engine - Actor의 생성과 응용
1. Actor 클래스 생성 및 삭제1-1. Actor와 Object 비교UObject언리얼 엔진에서 모든 클래스의 최상위 부모 클래스월드에 배치할 수 없고, 데이터나 로직만 담당할 수 있다.ex) 플레이어의 능력치, AI정보
gbleem.tistory.com
이번주도 화이팅 ~_~