분류 전체보기 73

[Unreal Engine] Online Subsystem

Online Subsystem (온라인 서브시스템) 및 그 인터페이스는 Steam, Xbox Live, Facebook 등의 온라인 서비스 기능을 공통된 방식으로 액세스할 수 있는 방법을 제공합니다. 여러 플랫폼에 출시하거나 여러 온라인 서비스를 지원하는 게임을 만들 때, 온라인 서브시스템을 사용하면 개발자는 각 지원 서비스에 맞게 구성만 조정해 주면 됩니다. 언리얼 엔진의 Online Subsystem (OSS) 은 멀티플레이어나 온라인 기능을 제공하기 위한 추상화 계층(플러그인 프레임워크) 입니다. 쉽게 말해, 게임에서 "플랫폼별 온라인 서비스(Steam, Epic Online Services, PSN, Xbox Live 등)" 와 직접 맞붙지 않고, 공통된 인터페이스를 통해 온라인 기능을 다룰 수 ..

[알고리즘/그래프] 벨만-포드 알고리즘

벨만–포드(Bellman–Ford) 알고리즘이란? 음수 가중치가 존재할 수 있는 유향 그래프에서 최단 거리를 구하는 알고리즘 - 다익스트라와 달리 음수 가중치를 허용- 음수 사이클(가중치 합이 음수인 사이클) 존재 여부도 판별 시간복잡도는 O(VE), 공간복잡도는 O(V). 핵심 아이디어- 에지리스트로 그래프를 구현, 최단 경로 배열 초기화- 모든 간선을 V−1번(정점 수가 V일 때) 반복적으로 완화(relax)하면, 시작점에서 각 정점까지의 최단 거리가 확정- 추가로 한 번 더 모든 간선을 점검하여 더 줄어드는 거리가 있다면, 음수 사이클이 존재한다고 결론 내릴 수 있다언제 쓰나?간선 가중치에 음수가 포함될 수 있을 때.최단 거리를 구하면서 음수 사이클 검출도 필요할 때.그래프가 매우 조밀하지 않거나..

[알고리즘/그래프] 다익스트라 (Dijkstra)

다익스트라(Dijkstra) 알고리즘이란? 가중치가 있는 그래프에서 하나의 시작 정점으로부터 다른 모든 정점까지의 최단 경로를 구하는 알고리즘단, 모든 간선의 가중치는 0 이상의 양수여야 한다.(음수 가중치가 있으면 벨만-포드 알고리즘을 사용)입력: 정점 V개, 간선 E개, 가중치가 양수인 그래프 목표: 시작 정점 start로부터 모든 정점까지의 최소 비용(거리) 우선순위 큐 (priority_queue)를 현재까지 가장 짧은 거리의 정점을 빠르게 찾기 위해 사용거리 배열 (distance[])은 각 정점까지의 최단 거리 저장동작 1. 시작 정점의 거리는 0으로 설정, 나머지는 무한대(INF) 2. 시작 정점을 우선순위 큐에 넣음 3. 큐에서 현재 가장 가까운 정점을 꺼냄 4. 해당 정점의 이웃들을 확인..

[C++] 변수 선언, Loop 안에서? 밖에서?

// 방법 1: 루프 안에서 변수 선언 및 할당for (int i = 0; i 성능 차이최신 컴파일러는 두 코드를 거의 동일하게 최적화해, 기본형 변수의 성능 차이는 거의 없다. 루프 밖에서 변수 선언 시, 오히려 스코프가 넓어져 루프 바깥에서 실수로 접근/변경할 수도... 어떤 방식을 선택할까? 기본형(int, float 등)루프 안에서 선언 (가독성, 안정성)생성/소멸 비용 큰 복잡한 객체루프 밖에서 선언 후 재사용 기본형의 경우 성능 차이는 거의 없으니, 코드 명확성과 유지보수를 우선으로! 매 반복 생성/소멸 비용이 큰 객체는 루프 밖에서 선언하여 재사용하는 것이 성능에 유리하다

언어/C++ 2025.07.26

[그래픽스] 렌더링 파이프라인

렌더링 파이프 라인이란? 3D 데이터를 2D인 화면에 보이는 이미지로 변환하는 일련의 과정DirectX, OpenGL, Vulkan 등 다양한 라이브러리가 있는데, 라이브러리마다 파이프라인이 다를까?구현 방식과 세부 제어 수준은 조금 다르지만, Core 개념은 동일하다.결국 렌더링 파이프라인은 vertex를 정리하고, 위치를 결정한 뒤, 픽셀화 시켜서 각 픽셀에 색을 입히는 과정. 아래 내용은 DirectX11을 기준으로 설명! 1. Input Assembler (IA)정점 버퍼(Vertex Buffer), 인덱스 버퍼(Index Buffer), 입력 레이아웃 (Input Layout), Primitive Topology를 설정 후 정점(Vertex) 데이터를 GPU에 전달Vertex Buffer정..

[알고리즘/백준] 2056: 작업

https://www.acmicpc.net/problem/20561. 문제 접근 N개의 작업이 있고, 각각의 작업은 선행 작업이 있을 수 있다.한 번에 하나의 작업만 수행할 수 있고,각 작업은 걸리는 시간이 주어진다.선행 작업이 모두 끝난 뒤에야 해당 작업을 수행할 수 있다.모든 작업을 완료하는 데 걸리는 최소 시간을 구하는 문제. 위상 정렬 + DP를 조합해서 풀 수 있다. 위상 정렬을 수행하면서 dp를 같이 수행한다..!dp[i] = i번 작업을 끝마치는 데까지 걸리는 시간점화식 : dp[next] = max(dp[next], dp[curr] + time[next]) 마지막으로, dp[1] ~ dp[n] 중 가장 큰 값이 모든 작업을 완료하는데 걸리는 시간이다.2. 코드 #include #inc..

알고리즘/백준 2025.07.18

[알고리즘/백준] 1766: 문제집

https://www.acmicpc.net/problem/1766 1. 문제 접근- 총 N개의 문제를 풀어야 한다.- A → B 라면 A를 풀고 B를 풀어야 함- 문제 중에서 번호가 작은 문제를 먼저 풀어야 함. 즉, 위상 정렬을 하되, 가능한 여러 문제 중에는 가장 번호가 작은 문제를 먼저 선택해야 한다. 위상 정렬 기반으로 문제를 해결하되, 진입 차수가 0인 노드들 중에서 번호가 작은 것부터 선택하기 위해 우선순위 큐(min-heap) 를 사용해 풀 수 있다!(일반적인 위상정렬에서는 큐를 사용해 구현함) 2. 코드#include #include #include int main(){ std::ios::sync_with_stdio(false); std::cin.tie(NULL); s..

알고리즘/백준 2025.07.11

[알고리즘/그래프] 위상 정렬

위상 정렬Directed Acyclic Graph(DAG, 비순환 방향 그래프)에서 정점들을 순서대로 나열하는 알고리즘 위상 정렬의 기본 개념진입 차수: 특정 노드로 들어오는 간선의 수위상 정렬의 조건: DAG에서만 가능, 만약 사이클이 있다면 위상 정렬 불가 순서그래프의 각 정점에 대해 진입 차수를 계산합니다.진입 차수가 0인 정점들을 큐에 넣습니다.큐에서 정점을 하나씩 꺼내며 그 정점과 연결된 다른 정점들의 진입 차수를 감소시킵니다.진입 차수가 0이 된 정점은 다시 큐에 넣고, 큐가 비어지면 알고리즘을 종료합니다.시간 복잡도O(V + E)V: 정점 수E: 간선 수 코드 (백준: 2252)https://www.acmicpc.net/problem/2252 int main(){ static int ..

[알고리즘/백준] 9251: LCS

https://www.acmicpc.net/problem/9251 1. 문제 접근LCS는 대표적인 DP 문제로,두 문자열이 주어졌을 때, 공통으로 나타나는 부분 수열 중 가장 긴 길이를 구하는 문제이다. dp[i][j] = 첫 번째 문자열의 i번째 문자까지와 두 번째 문자열의 j번째 문자까지 봤을 때 LCS의 길이 예제를 보며 DP에서 가장 중요한 점화식을 세워보자.dp0ACAYKP00000000C0011111A0112222P0112223C0122223A0123333K0123344 1. a[i-1] 과 b[j-1] 의 문자가 같을 때, 공통 수열에 포함시킨다. --> dp[i][j] = dp[i-1][j-1] + 1 2. a[i-1] 과 b[j-1] 의 문자가 다를 때, 둘 중 하나를 버린다. -..

알고리즘/백준 2025.07.08