전체 120

[C++] 백준 14500번 - 테트로미노 (브루트포스)

이 문제를 이틀에 걸려 풀었다..아이디어가 안떠오른다거나 복잡한 구현이 아니었는데도 오래 걸린 이유는문제를 단순하게 바라보지 않아서 그런 것 같다. 사실 내용만 봤을 때는 별게 없어서 금방 풀겠네? 라고 생각했는데도형 회전/대칭 공식 찾기, 종이에서 도형 올리기 위한 공식 찾기 등 단순한 문제를 복잡하게 풀려고 애를 썼다;ㅎ 결국 이틀차에 챗지피티에게 아이디어를 제공 받아서 풀어냈다.다른 사람들의 정답 코드를 보니 여러 코드가 있었지만,나는 그냥 단순하고 직관적으로 도형의 모든 경우의 수를 상대 좌표로 담아놓고반복문을 돌리며 종이 범위를 벗어나는 곳은 제외하고 해당 위치의 수를 계산해줬다. 구현하고 나니 좀 어이없을 정도로 쉬웠지만,때로는 직관적인 방법이 먹힐 때가 있다는 것을 배웠다. 정답 코드#i..

코딩테스트 2025.07.31

[C++] 백준 3190번 - 뱀 (시뮬레이션, 덱)

문제 풀기 전에 덱을 사용한다는 것을 봐버려서.. 뱀의 위치를 덱을 사용해서 풀어야겠다고 생각했다.문제에서 제시한 뱀의 이동 규칙 그대로 알고리즘을 구현하면 돼서 어렵진 않았으나,방향 전환하는 부분에서 갑자기 애를 먹고 갈피를 못잡다가 결국 풀긴 풀었다..우선 순위 큐를 사용한 이유는 문제에서 주어지진 않았지만, 초를 오름차순으로 정렬해야 한다고 생각해서 쓸데없는? 디테일을 적용했다. (바킹독 님의 코드를 보니 입력 예외는 없는 것 같아서 그냥 큐를 써도 될 듯 하다.) 시뮬레이션 문제를 계속 풀다보니 생각보다 재밌는 부분이 많은 것 같다.문제 자체가 이야기처럼 주어지고,문제 내부에서 자체적으로 알고리즘을 구성해주므로 그대로 구현하기만 하면 된다는 점이 그렇다. 예전에는 백트래킹 문제와 더불어 시뮬레이..

코딩테스트 2025.07.26

[C++] 백준 14503번 - 로봇 청소기 (시뮬레이션)

문제를 보자마자 BFS 문제라고 생각이 들어서시간 복잡도를 계산한 뒤 넉넉하게 통과할 것 같아 해당 알고리즘을 사용해서 풀고 있었는데..풀다보니 BFS 문제가 아니라 단순 구현 + 시뮬레이션 문제라는 것을 깨닫고 로직을 재검했다. N과 M의 값이 매우 작기 때문에 시간 복잡도는 걱정 없었다.다만 청소기의 작동 방식 중, 주변 4칸 중 청소되지 않은 빈 칸이 있는 경우에 반시계 방향으로 회전 후 앞쪽 칸이 청소되지 않은 빈 칸이 아닌 경우에 대해서 어떻게 해야할 지 자세히 나오지 않아서 그냥 1번으로 돌아가게 한 것 말고는 어려운 점은 없었다. 반시계 방향 회전 시 공식은Dir = (Dir + 3) % 4 를 사용해 구해주었고, 바라보는 방향의 뒤쪽 칸의 위치를 미리 구해주어 편리하게 사용했다. 모든 로직..

코딩테스트 2025.07.25

[C++] 백준 16985번 - Maaaaaaaaaze (백트래킹, BFS)

바킹독 님의 시뮬레이션 강의를 듣고 해당 문제집에 있는 문제 중 하나여서시뮬레이션 문제라는 것을 알고 풀기 시작했다. 문제를 읽다보니 꽤나 복잡해서 여러 알고리즘을 사용해야 한다고 판단했다.먼저 전체 알고리즘을 짜봤는데,① 판 돌리기 (4^5가지 경우의 수)② 판 쌓기 (5!가지 경우의 수)③ 입구 선택하기 (8가지 경우의 수)④ 출구까지 최소 이동 거리 갱신하기 (5³가지 경우의 수) 4^5 × 5! × 8 × 5³ = 대략 1억 정도의 시간 복잡도를 가지므로 시간 제한에 걸리지 않는다. 판을 돌리고 쌓기 위해서 백트래킹을 사용하고,입구부터 출구까지 최소 이동 거리를 계산하기 위해 BFS를 사용한다. 중요한 점은,BFS 탐색 전에 입구와 출구가 막혀서 갈 수 없는 곳인 경우는 탐색하지 않도록 가지치기를..

코딩테스트 2025.07.24

[Unreal Engine] Anim Notify와 Anim Notify State

1. Anim Notify개념애니메이션 재생 중 특정 프레임에 한 번만 호출됨즉발성 이벤트에 적합예시공격 소리 재생 (PlaySound)이펙트 스폰 (SpawnEmitter)콤보 카운트 증가상태 리셋사용 코드 예시virtual void Notify(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation) override; 2. Anim Notify State개념애니메이션 내에서 시작-끝 시간 지정시작과 끝 각각에 콜백이 존재상태 유지 중 반복 처리 가능주요 메서드// 시작 타이밍 호출virtual void NotifyBegin(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, f..

[Unreal Engine] 캐릭터 스탯과 위젯

액터 컴포넌트를 활용한 스탯의 설계액터에 부착할 수 있는 컴포넌트 중 트랜스폼이 없는 컴포넌트액터의 기능을 확장할 때 컴포넌트로 분리해 모듈화할 수 있음스탯 데이터를 담당하는 컴포넌트와 UI 위젯을 담당하는 컴포넌트로 분리액터는 두 컴포넌트가 서로 통신하도록 중개하는 역할로 지정 언리얼 델리게이트를 활용한 발행 구독 모델의 구현푸시(Push) 형태의 알림(Notification)을 구현하는데 적합한 디자인 패턴스탯이 변경되면 델리게이트에 연결된 컴포넌트에 알림을 보내 데이터를 갱신스탯 컴포넌트와 UI 컴포넌트 사이의 느슨한 결합의 생성 Transient 키워드디스크에 저장할 필요가 없는 데이터에 해당 키워드를 붙여주면 불필요한 공간이 낭비되지 않음UPROPERTY(Transient, Visible..

A* 알고리즘

A* 알고리즘?다익스트라 알고리즘을 발전시킨 알고리즘다익스트라 알고리즘은 종점으로부터 멀어지는 것을 고려하지 않고 정점을 결정하기 때문에 불필요한 탐색 과정을 거친다.A* 알고리즘은 휴리스틱 코스트(목표 지점까지의 거리를 미리 설정하는 추정 비용)를 사용해 불필요한 탐색 과정을 줄이도록 개선되었다.게임 프로그래밍에서 플레이어를 추적하는 적을 구현할 때 많이 쓰이나, 계산량이 많아 게임 성능을 저하할 수 있다. 각 지점에서 목표 지점까지의 거리에 대한 정보가 있는 경우만 사용 가능하다. 참고 블로그 : https://velog.io/@1ncursio/%EC%97%90%EC%9D%B4%EC%8A%A4%ED%83%80-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EC%97%90-%EB%..

[C++] 백준 14891번 - 톱니바퀴 (시뮬레이션)

문제 링크 : https://www.acmicpc.net/problem/14891 처음 문제를 읽었을 땐 굉장히 쉽다고 생각했는데 2시간 반 동안 어찌저찌 구현은 했으나 주어진 예제 입력 중 하나를 통과하지 못해서 결국 정답 코드를 보고 문제를 다시 풀게 되었다. 처음에는초기의 바퀴 상태를 저장하고 바퀴 번호와 회전 방향에 따라서 현재 바퀴 번호를 기준으로 좌우로 인덱스를 조절하며 바퀴를 회전하는 방식으로 구현했다. (STL에 rotate()가 있는지 모르고 직접 회전을 구현했다..)void rotate(int num, int dir){ for (int i = 0; i = 0) { if (before[ltCur][6] == before[left][2]) break; rotate(left--, -..

코딩테스트 2025.07.11

[Unreal Engine] 게임 제작 기초

1. 언리얼 게임 프레임워크1) 게임 콘텐츠의 구조게임 제작을 위해 언리얼 엔진은 자체적으로 설계한 프레임워크를 제공이를 게임플레이 프레임워크 (Gameplay Framework)라고 부름 2) 월드 (World)게임 콘텐츠를 담기 위해 제공되는 가상의 공간월드는 시간, 트랜스폼, 틱을 서비스로 제공월드 세팅이라는 콘텐츠 제작을 위한 기본 환경 설정을 제공월드의 기본 단위는 액터(Actor)로 정의되며 액터 클래스는 언제나 접두사 A를 사용월드의 역할게임 콘텐츠를 담는 공간 (Transform)게임 콘텐츠의 진행 (Tick)게임 흐름을 위한 시간 (Time)기본 환경 설정 (World Setting)월드의 단위 구성 요소 (Actor) 3) 게임 모드 (Game Mode)게임 규칙을 지정하고 게임을 ..

[Unreal Engine] 메모리 관리

1. 언리얼 엔진의 자동 메모리 관리1) C++ 언어 메모리 관리의 문제점C++은 저수준으로 메모리 주소에 직접 접근하는 포인터를 사용해 오브젝트를 관리프로그래머가 직접 할당(new)과 해지(delete) 짝 맞추기를 해야 함이를 잘 지키지 못하는 경우 다양한 문제가 발생 가능잘못된 포인터 사용 예시메모리 누수 (Leak): new를 했는데 delete 짝을 맞추지 못함. 힙에 메모리가 그대로 남아있음허상 (Dangling) 포인터: (다른 곳에서) 이미 해제해 무효화된 오브젝트의 주소를 가리키는 포인터와일드 (Wild) 포인터: 값이 초기화되지 않아 엉뚱한 주소를 가리키는 포인터잘못된 포인터 값은 다양한 문제를 일으키며 한 번의 실수는 프로그램을 종료시킴게임 규모가 커지고 구조가 복잡해질수록 프로그래머..