728x90

분류 전체보기 93

[BOJ] 2309 일곱 난쟁이 C++

개요 https://www.acmicpc.net/problem/2309 2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net 브롱즈급 브루트포스 문제다. 본문 풀이 생각보다 오래 걸렸다,,!! 난쟁이 9명 중 7명을 추려내려고 하니 여간 복잡한 게 아니었는데,, 반대로 생각해 보니 2명만 빼면 되는 것이었다. 브루트포스로 정답을 골라낸 후 1000으로 바꿔주었다.(모든 입력 값은 100 이하) 주의할 점은 값을 오름차순으로 정렬 후 출력해야 한다는 점! 코드 #include #include using namespace st..

[BOJ] 1260 DFS와 BFS C++

개요 https://www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 실버 2급 DFS와 BFS 기초 문제다. 본문 풀이 인접 리스트 기반(vector)으로 구현했다. 각각 DFS는 stack, BFS는 queue를 사용했다. 정점의 번호가 작은 순으로 탐색하라는 조건이 있기 때문에 리스트(vector)를 정렬해주어야 한다. DFS는 스택으로 후입선출이기 때문에 내림차순으로, BFS는 큐로 선입선출이기 때문에 오름차순으로 ..

[BOJ] 2606 바이러스 C++

개요 https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 실버 3급 그래프 탐색 문제다. 본문 풀이 그래프 탐색 문제 중 저 난이도 문제인듯하다. 제한이 크게 없어 BFS, DFS 중 어느 것을 사용해도 문제가 없을 것이라 판단했다. queue를 활용한 인접 리스트(vector) 기반 BFS로 풀었다. 1번 컴퓨터는 제외이기 때문에 이 점에 유의해야 한다. 코드 #include #include #include #include using namespace..

[알고리즘] DFS와 BFS

DFS(Depth First Search) DFS(깊이 우선 탐색)는 그래프의 탐색 방법 중 한 가지이다. DFS는 크게 세 가지 과정으로 나뉜다. 한쪽으로만 계속 방문 더 이상 방문할 정점이 없으면, 이전 정점으로 이동 처음 정점으로 돌아가면 탐색 종료 DFS의 구현 정점 방문 정보 기록을 목적으로 스택을 활용하면 된다. 방문 여부는 배열에 저장한다. 정점을 방문할 때 출발 정점을 스택에 PUSH 하면 된다. 이때 방문 여부는 출발 정점, 도착 정점 둘 다 처리한다. 더 이상 방문할 정점이 없을 경우 스택에서 POP 하면서 이전 정점으로 돌아가며 다시 확인하면 된다. 모든 정점을 방문했을 경우를 배열로 확인하여 탐색을 종료하면 끝이다. 다음 정점 방문 (스택에 이전 정점 추가, 둘 다 방문 배열 체크)..

[자료구조] 그래프(Graph)

개요 그래프는 정점과 정점을 잇는 간선의 모임이며 데이터의 표현 방식이다. 그래프 자체가 알고리즘이라기 보단, 그래프를 근거로한 여러 알고리즘들이 존재한다. 본문 그래프의 종류 그래프의 집합 표현 V = Vertex E = Edge V(G1) = {A, B, C, D} E(G1) = {(A, B), (A, C), (A, D), (B, C), (C, D)} V(G3) = {A, B, C, D} E(G3) = {, , } 그래프의 구현 인접 행렬 기반 V*V 크기의 2차원 배열을 사용하여 구현한다. 인접 리스트 기반 연결리스트를 기반으로 그래프를 구현한다. 무방향 그래프의 경우 정점 노드를 둘다 연결해야함에 주의 그래프 탐색 알고리즘 대표적으로 DFS와 BFS가 있다. DFS(Depth First Searc..

[Unity] \uFFFD Warning

The character with Unicode value \uFFFD was not found in the [SDF] font asset or any potential fallbacks. It was replaced by Unicode character \u25A1 in text object [CostText].UnityEngine.Debug:LogWarning (object,UnityEngine.Object) 문제 팀원 컴퓨터에서는 한글이 잘 나오는데 pull 받아보면 내 컴퓨터에서만 한글이 나오지 않는 문제가 있었다. 인코딩 관련 문제인건 알겠는데 \uFFFD라는 문자를 검색해보니 "�" 이런 문자만 나올 뿐이다. 해결 원인을 계속 찾아보다가 혹시나 해서 � 문자를 전체 검색해봤다.(Rider 기준..

게임/Unity 2023.01.31

[UE5] 언리얼 레벨 만들기

새 레벨 만들기 파일(File) - 새 레벨(New Level)에서 레벨을 새로 만들 수 있다. 오픈 월드(Open World): 월드 파티션(World Partition) 기능을 사용하여 대규모의 스트리밍 가능한 오픈 월드를 생성하는 샘플 콘텐츠가 제공되는 레벨 빈 오픈 월드(Empty Open World): 월드 파티션을 사용하지만 어떠한 콘텐츠도 제공되지 않는 레벨 기본(Basic): 평면, 라이팅, 애트머스피어, 익스포넨셜 포그가 제공되는 레벨 빈 레벨(Empty Level): 아무것도 제공되지 않는 레벨 환경 라이트 믹서(Environment Light Mixer) 빈 레벨을 생성하면 정말 아무것도 없는 레벨이 생성된다. 이때 환경 라이트 믹서라는 기능을 통해 간편하게 레벨 환경을 세팅할 수 있..

게임/Unreal 2023.01.31

[UE5] 캐스팅(Casting)

Cast(From); 언리얼에서는 레벨에 배치되는 모든 클래스가 AActor 클래스를 상속받는다. 또한 개발자가 만들어내는 클래스 역시 AActor 클래스를 상속받는 경우가 많다. 만약 플레이어가 발사체에 충돌했을 때 데미지를 받는 기능을 만든다면 아래와 같이 작성할 수 있다. 레벨에 존재는 오브젝트들은 모두 AActor 클래스를 상속받기 때문에, 충돌한 오브젝트의 AActor 클래스를 넘겨준다. 하지만 위와 같이 작성한다면 어떤 오브젝트와 충돌이 발생하더라도 플레이어에게 피격이 발생할 것이다. 따라서 플레이어와 충돌한 오브젝트가 발사체인지 확인하는 작업을 거쳐야한다. 캐스팅을 이용하면 이 문제를 해결할 수 있다. 충돌한 AActor 클래스가 AProjectile로 캐스팅이 되었다면 피격 로직이 수행되고..

게임/Unreal 2023.01.29

[리팩토링] Guard Clause

개요 Rider 사용하며 종종 if~else문 관련하여 리팩토링을 해주는 경우가 있었다. 최근 이 기법의 이름이 있었다는 사실을 알게되었는데,, 이름하여 "Guard Clause(가드 절)" 본문 if(!isDead) { Look(); if(!isJumping) { Move(); } } 위와 같이 중첩 조건문으로 이루어진 코드가 있을 수 있다. 이런 식으로 작성하다 보면 들여 쓰기의 많아지고 깊이가 깊어져 가독성이 떨어질 수밖에 없다. 여기에 else문까지 추가된다면 사이를 건너 뛰며 읽어야 하는 노력까지 더해진다. 이럴 때 필요한게 바로 Guard Clause이다. if(isDead) return; Look(); if(isJumping) return; Move(); 조건을 반대로 생각해서 반환을 해주는..

CS/리팩토링 2023.01.26

[UE5] 나나이트 가상화 지오메트리 (Nanite Virtualized Geometry)

개요 나나이트란 새로운 내부 메시 포멧과 렌더링 기술을 사용하여 픽셀 스케일의 디테일 및 다수의 오브젝트를 렌더링하는 가상화 지오메트리 시스템이다. 클러스터 컬링과 자동 LOD(Level of detail)를 통해 고품질 더 적은 성능과 손실로 사용할 수 있다. 활성화 : 스태틱 매쉬 - 디테일 - 나나이트 세팅 - Enable 본문 작동 방식 나나이트에서는 일정 수의 폴리곤을 클러스터라는 단위로 묶어준다. 이렇게 묶은 클러스터를 또다시 묶어 부모 클러스터로 만들어준다. 이 클러스터들로 로우 퀄리티의 메시를 직접 만들어 자동으로 LOD를 처리해준다. 또한 이렇게 만들어진 클러스터들을 기반으로 카메라의 시점에 따라 컬링해 준다. 일반적으로 오클루전 컬링(Occlusion Culling)은 컬링 기준을 오브..

게임/Unreal 2023.01.24