TIL 70 은 바쁜 일정으로 적지 못했습니다.
팀 프로젝트 회의와 수업을 듣고, 개인적으로 데디케이티드 서버 공부를 진행했습니다.
https://gbleem.tistory.com/143
Unreal Engine - 야구게임(데디케이티드 서버)
아래 글에 이어서 진행되는 내용입니다.https://gbleem.tistory.com/140 Unreal Engine - 데디케이티드 서버 개념 및 실습1. 서버의 종류P2P각 컴퓨터가 서버랑 클라이언트를 모두 수행하는 방식리슨 서버HOST
gbleem.tistory.com
1. 코딩테스트
오늘은 solved.ac의 class 4의 "최소비용 구하기" 문제를 풀었습니다.
https://www.acmicpc.net/problem/1916
문제를 보니 우연히 최근에 공부한 최단 경로 구하는 문제 유형이었습니다.
일단 문제에서 가중치가 양수니까 다익스트라를 쓸 수 있었습니다.
처음에는 배열을 가지고 아래처럼 코드를 구성했는데, 계속 통과하지 못했습니다.
#include <iostream>
#include <vector>
#include <climits>
using namespace std;
int n, m, st, en;
int board[1002][1002];
int vis[1002];
int main()
{
cin >> n;
cin >> m;
for(int i = 1; i <= n; ++i)
{
vis[i] = 0;
for (int j = 1; j <= n; ++j)
{
board[i][j] = INT_MAX;
}
}
for (int i = 0; i < m; ++i)
{
int u, v, w;
cin >> u >> v >> w;
board[u][v] = w;
}
cin >> st >> en;
vector<long> distance(n + 2, INT_MAX);
distance[st] = 0;
for (int i = 1; i <= n - 1; ++i)
{
long minDist = INT_MAX;
int closeNode = -1;
for (int j = 1; j <= n; ++j)
{
if (!vis[j] && distance[j] < minDist)
{
minDist = distance[j];
closeNode = j;
}
}
if (closeNode == -1)
break;
vis[closeNode] = 1;
for (int j = 1; j <= n; ++j)
{
long newDist = distance[closeNode] + board[closeNode][j];
if (!vis[j] && board[closeNode][j] != INT_MAX && newDist < distance[j])
distance[j] = newDist;
}
}
cout << distance[en];
}
저번에 공부하면서, 우선순위큐를 사용해서 풀어야만 풀리는 문제가 있다는 말이 기억이 나서 아래처럼 우선순위 큐를 쓰는 코드로 수정하였더니 통과하였습니다.
- 우선순위 큐로 푸는 다익스트라 코드에 익숙해져야 할 것 같습니다.
#include <iostream>
#include <vector>
#include <queue>
#include <climits>
using namespace std;
vector<pair<int, int>> adj[1002];
int vis[1002];
int n, m;
int st, en;
int main()
{
cin >> n;
cin >> m;
fill(vis, vis + n + 2, INT_MAX);
for (int i = 0; i < m; ++i)
{
int u, v, w;
cin >> u >> v >> w;
adj[u].push_back({ w,v });
}
cin >> st >> en;
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
vis[st] = 0;
pq.push({ vis[st], st });
while (!pq.empty())
{
auto cur = pq.top();
pq.pop();
if (vis[cur.second] != cur.first)
continue;
for (auto nxt : adj[cur.second])
{
if (vis[nxt.second] <= vis[cur.second] + nxt.first)
continue;
vis[nxt.second] = vis[cur.second] + nxt.first;
pq.push({ vis[nxt.second], nxt.second });
}
}
cout << vis[en];
}
2. 트러블슈팅
새로운 controller 클래스를 만들어서
아래와 같이 변수를 선언했는데 오류가 발생하였다.
UPROPERTY()
TObjectPtr<UUserWidget>StartGameWidgetInstance;
심각도 코드 설명 프로젝트 파일 줄 비표시 오류(Suppression) 상태 세부 정보
오류 LNK2019 "__declspec(dllimport) class UClass * __cdecl Z_Construct_UClass_UUserWidget_NoRegister(void)" (__imp_?Z_Construct_UClass_UUserWidget_NoRegister@@YAPEAVUClass@@XZ)"void __cdecl `dynamic initializer for 'public: static struct UECodeGen_Private::FObjectPropertyParams const Z_Construct_UClass_AMenuController_Statics::NewProp_StartGameWidgetInstance''(void)" (??__E?NewProp_StartGameWidgetInstance@Z_Construct_UClass_AMenuController_Statics@@2UFObjectPropertyParams@UECodeGen_Private@@B@@YAXXZ) 함수에서 참조되는 확인할 수 없는 외부 기호 FoodRumble E:\MY_GAME\UNREAL\SCC_Unreal_git\SCC_CH4_Team_git\1st-Team3-CH4-Project\FoodRumble\Intermediate\ProjectFiles\MenuController.gen.cpp.obj 1
이유는 Build.cs에 UMG가 포함되어있지 않아서 발생하는 문제였다.
언리얼 5 버전에서는 default로 설정이 되어있는데, 해당 프로젝트는 4.27 버전으로 만들고 switch 버전을 진행한 프로젝트이다보니 이런 문제가 발생한 것이었다.
아래와 같이 추가해주자..
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" , "UMG"});
'TIL' 카테고리의 다른 글
TIL day 73 (0) | 2025.04.03 |
---|---|
TIL day 72 (0) | 2025.04.02 |
TIL day 69 (0) | 2025.03.28 |
TIL day 68 (0) | 2025.03.27 |
TIL day 67 (0) | 2025.03.26 |