[백준 C++] 10815 : 숫자 카드
CSE/코딩 문제풀이2024. 3. 12. 01:02[백준 C++] 10815 : 숫자 카드

https://www.acmicpc.net/problem/10815 브루트포스 방식으로 모든 숫자 카드들을 비교하면 시간 초과로 해결하지 못하는 문제이다. 시간 단축을 위해 이분 탐색을 활용해 숫자 카드들을 비교할 것이다. 이분탐색은 한 리스트에 있는 데이터들의 탐색 범위를 점점 좁혀나가면서 구분하는 방식이다. 시작 노드 및 끝노드 인덱스를 더한 뒤 2로 나누어 중간 인덱스를 구하고, 그 값과 원하는 타겟값을 비교해서 targer > list[mid]인 경우 시작 노드값을 올리고, 반대인 경우는 끝 노드의 값을 올려가면서 찾는다. 이 이분 탐색은 반복문(while)을 사용한 방법과 재귀를 사용한 방법, 두 가지가 존재하는데 필자는 재귀를 좋아하기 때문에 재귀 방식을 사용하였다. #include #incl..

[Unreal Engine C++] Timeline을 사용하여 암전 효과 만들기
UnrealEngine/공부2024. 3. 2. 17:02[Unreal Engine C++] Timeline을 사용하여 암전 효과 만들기

게임 프로젝트를 진행하면서 암전 효과가 필요했다. 특정한 버튼을 누르면 화면이 어두워졌다가 다시 밝아지면서 맵 또는 캐릭터가 변화하는 느낌을 주고 싶었다. 이를 언리얼에는 간단하게 시간 기반 애니메이션을 재생할 수 있도록 도와주는 타임라인이라는 시스템을 활용하여 암전 효과를 구현해보자. 에디터에서의 준비 일단 암전효과를 구현하기 위해 PostProcessVolume을 사용할 것이므로 레벨에 하나 놓아두고, 원하는 범위를 설정한다. PostProcessVolume의 Exposure의 노출 보정(Auto Exposure Bias)를 활성화시켜준다. 값은 숫자가 커질수록 화면이 밝아지고, 작아지면 어두워지기 때문에 타임라인을 사용해 값을 낮췄다가 다시 복구시킬 것이다. 또한 코드상에서 이 볼륨을 찾기 위해 M..

[백준 C++] 1253 : 좋다
CSE/코딩 문제풀이2024. 2. 29. 18:00[백준 C++] 1253 : 좋다

https://www.acmicpc.net/problem/1253 간단하게 생각하면 모든 수를 하나씩 더해봐서 할 수 있는 간단한 문제이다. 다만, N의 최대값은 2,000인데 시간복잡도에 따라 N^2 or N^3 등등 커질수록 많은 시간이 걸릴 것이다. 그렇게 되면 시간초과에 걸리게 된다. 즉, 이 문제를 풀기 위해서는 그 이하의 시간복잡도를 가지는 알고리즘을 사용하여 문제를 풀어야 한다. 두 개의 합으로 나타낼 수 있는 수를 찾는 문제이므로, 투 포인터 알고리즘을 사용한다. 시작 인덱스 0과, 끝 인덱스 N - 1에서 차례차례 더해서 확인해가며 값을 찾으면 시간복잡도 O(N)으로 값을 찾을 수 있다. 그 작업을 수행하기 위해서는 정렬을 먼저 수행하여 두 수를 더해 그 값을 비교하여 합이 작으면 시작 ..

UnrealEngine/공부2024. 2. 27. 16:59[Unreal Engine C++] Fireball의 구현

프로젝트에서 플레이어 캐릭터의 스킬 중 하나를 파이어볼로 만들어 볼 것이다. 파이어볼은 캐릭터가 스킬 버튼을 클릭했을 시, 캐릭터의 앞에 생성된다. 이 후 앞으로 일정한 속도로 날라간 뒤 특정 액터들에 맞게 된다면 데미지를 주고 Destroy()된다. 만약 정해둔 거리 이상으로 날라가면 사라지게 만들 것이다. 파이어볼을 담당할 액터를 상속받는 TOFireball 클래스 파일을 생성한다. //TOFireball.c #pragma once #include "Tellours.h" #include "GameFramework/Actor.h" #include "TOFireball.generated.h" UCLASS() class TELLOURS_API ATOFireball : public AActor { GENER..

[Unreal Engine C++] 진행도에 따른 텔레포트 설정
UnrealEngine/공부2024. 2. 27. 16:55[Unreal Engine C++] 진행도에 따른 텔레포트 설정

이 프로젝트의 진행은 첫 맵에서 Level 1로 이동해서 깬 뒤, 다음 Level 2로 가는 식으로 구현되어 있다. 하지만 Level 1을 깬 뒤 Level 2 텔레포트를 생성하게 하는 것이 아닌, 실제로는 맵에 구현이 되어 있지만 레벨을 불러올 때마다 진행도(Progress)를 확인하고 이보다 낮으면 Destroy()를 하도록 해서 진행도와 맞지 않는 레벨로 이동하는 것을 막아보고자 한다. 이를 구현해보자. //TOSaveGame.h #pragma once #include "Tellours.h" #include "GameFramework/SaveGame.h" #include "TOSaveGame.generated.h" /** * */ UCLASS() class TELLOURS_API UTOSaveGam..

UnrealEngine/공부2024. 2. 27. 16:51[Unreal Engine C++] 현재 레벨 저장 기능의 구현

이전에 Save기능을 구현했었다. 여기서 더 나아가 SaveGame을 할 때 자신이 현재 있는 레벨을 저장해서 이후 다시 게임을 시작할 때 불러와야 한다. 이를 구현해보자. //TOSaveGame.h #pragma once #include "Tellours.h" #include "GameFramework/SaveGame.h" #include "TOSaveGame.generated.h" /** * */ UCLASS() class TELLOURS_API UTOSaveGame : public USaveGame { GENERATED_BODY() public: UTOSaveGame(); UPROPERTY() FName MapName; ... }; //TOSaveGame.cpp #include "TOSaveGame..

image