TIL

TIL day 86

gbleem 2025. 4. 22. 15:15

1. 코딩테스트


오늘은 class 4의 특정한 최단 경로 문제를 풀었다.

https://www.acmicpc.net/problem/1504

 

문제를 보고 다익스트라 문제일 것이라는 생각이 들었다.

이유는 

  • 가중치가 존재하고,
  • 최단 경로를 구해야 했기 때문이다.

아직 다익스트라 코드에 익숙하지 않아서 기존에 공부한 코드를 좀 참고하여 풀었다. 

추가로 다익스트라 문제를 몇 개 풀었는데, 배열로는 시간초과가 발생하는 문제가 있어서 우선순위 큐 이용한 방식에 익숙해지면 될 것 같다.

 

코드 해설

  • 이 문제에 있어서는 추가적으로 무조건 지나가야할 정점이 2개가 주어진다. 
  • 이 정점을 모두 지나면서 최단경로를 구해야하기 때문에 아래와 같은 과정을 수행했다.
  • 다익스트라 하는 함수를 시작점을 매개변수로 넣어 여러번 수행할 수 있게 하였다.
  • 이 문제에서는 1 -> v1 -> v2 / 1 -> v2 -> v1 이런 두가지 방식이 있을 수 있기 때문이다.
  • 추가)
    • 마지막에 문제가 89% 정도에서 틀린 경우가 있었는데, 이 경우 INF 값을 너무 크게 잡아서 overflow가 발생하는 문제였다.
    • 그래서 INF의 값을 3으로 나눠서 overflow를 방지해 주어서 해결하였다.

정답 코드

#include <iostream>
#include <vector>
#include <queue>
using namespace std;

vector<pair<int,int>> adj[802];
const int INF = 1e9/3;
int dist[802];
int n, e;
int v1, v2;
int answer1 = 0;
int answer2 = 0;

void Dijk(int st)
{
	fill(dist, dist + n + 1, INF);
	priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>>pq;

	dist[st] = 0;
	pq.push({ dist[st], st });

	while (!pq.empty())
	{
		auto cur = pq.top();
		pq.pop();

		if (dist[cur.second] != cur.first)
			continue;
		for (auto nxt : adj[cur.second])
		{
			if (dist[nxt.second] <= dist[cur.second] + nxt.first)
				continue;

			dist[nxt.second] = dist[cur.second] + nxt.first;
			pq.push({ dist[nxt.second], nxt.second });
		}
	}
}

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> n >> e;

	for (int i = 0; i < e; ++i)
	{
		int a, b, c;
		cin >> a >> b >> c;
		
		adj[a].push_back({ c, b });
		adj[b].push_back({ c, a });		
	}
	cin >> v1 >> v2;

	Dijk(1);		
	answer1 += dist[v1];
	Dijk(v1);
	answer1 += dist[v2];
	Dijk(v2);
	answer1 += dist[n];

	Dijk(1);
	answer2 += dist[v2];
	Dijk(v2);
	answer2 += dist[v1];
	Dijk(v1);
	answer2 += dist[n];

	int ans = min(answer1, answer2);
	if (ans >= INF)
		cout << -1;
	else
		cout << ans;
}

 

 

2. 언리얼


오늘은 지난번에 다 공부하지 못했던, 언리얼 멀티플레이 최적화 관련 강의를 듣고 공부를 진행하였습니다.

 

강의는 다 들었고, 1강 (recap), 2강(큰 데이터 리플리케이션 과 RPC최적화) 에 대한 내용을 정리하였습니다.

https://gbleem.tistory.com/166

 

Unreal Engine - 멀티플레이 네트워크 최적화 1

1. Recap1 - 1. Server - Client 모델언리얼 엔진은 멀티플레이 게임에서 Server-Client 구조를 사용한다.서버만이 결정을 내리며, Authority를 가진다.클라이언트끼리는 직접 통신하지 않는다.클라이언트에서

gbleem.tistory.com