
1.Unreal Engine의 기본 개념과 역할에 대해 이해합니다.2.게임씬(Game Scene)의 개념과 게임개발에서의 중요한 부분에 대해 알아봅니다.3.Unreal Engine이 게임 산업에서 사용되는 사례를 찾아보고 탐구합니다.Unreal Engine이 무엇인지

Unreal Engine 마켓플레이스에 접속하여 관심 있는 무료 에셋 1~2개를 검색하세요.에셋을 선택할 때, 다음 조건을 충족해야 합니다:ㅇ 에셋의 카테고리(예: 환경, 캐릭터, 소품 등)를 명확히 정의.ㅇ 프로젝트에 사용할 수 있는 라이선스가 포함된 에셋.ㅇ 다운로

https://dev.epicgames.com/community/learning/courses/QaY/unreal-engine-2d578d/5Pn8/unreal-engine-af9975Unreal Engine에서 학습한 개념과 실습을 복습하고, 이를 통해 엔진

https://dev.epicgames.com/community/learning/courses/Woq/unreal-engine-5/PWqV/unreal-engine-a6ce90위 영상을 시청하셨다면, 함께 내용을 요약해보아요!언리얼 엔진 5와의 첫 시간 영상을

여러분이 가장 좋아하고 즐겨하는 게임은 무엇인가요?지금 떠오르는, 혹은 즐겨하는 게임이 있다면 그 게임의 동작이나 구조에 대한 생각을 해보신 적 있으신가요? 아래의 예시들을 보며 특정 게임의 상징적인 시스템이나 특징을 분석해보는 시간을 가져봅시다.✔️예시피파 온라인3

새 레벨을 만들고, 기본 오브젝트들로 공간을 구성해봅니다.언리얼 에디터에서 File → New Level → Basic 선택레벨 저장: MyFirstLevel이라는 이름으로 저장Place Actors 패널에서 Cube 선택바닥 역할로 사용할 큐브를 배치하고 Scale을

ㅁ QUEST 레벨에 조명을 배치하고 오브젝트에 다양한 머티리얼을 적용해 봅니다. Step 0. 프로젝트 생성 File → New Project → Games → Third Person(또는 Blank) 선택 ❗️Starter Content 체크❗️ 프로젝트 이름 지

나만의 캐릭터 블루프린트를 만들고, 이동 입력 세팅을 완료합니다.새로운 언리얼 프로젝트 생성 시, Third Person Template 선택Starter Content 포함Content > ThirdPerson > Blueprints > BP_ThirdPersonCh
ㅁ QUEST 이번 과제는 C++을 활용한 텍스트 기반 선택지 게임 제작입니다. 이번 주차 동안 배운 C++ 프로그래밍 기초를 실제 게임 개발에 적용해보고, 게임 개발의 기본 흐름을 이해하는 것을 목표로 합니다. 과제 목표 변수, 자료형, 연산자, 제어문, 함수 등

1\. C++ 기반 프로젝트 세팅Unreal Engine 5에서 C++ Blank 프로젝트 생성Starter Content 포함Visual Studio 연동 및 클래스 빌드 확인2\. 캐릭터 C++ 클래스 구현 (ShootingCharacter)(ShootingChar

무기 선택 (0, 1, 2 키)키보드 숫자 키를 누르면 현재 무기가 Pistol(0), Shotgun(1), Rifle(2) 중 하나로 교체됩니다.교체 시 선택된 무기의 탄약 수 / 온도 / 열 상태가 실시간으로 출력되어 상태를 확인할 수 있습니다.격발 (Left Mo
📌 목표 플레이어를 인식하고 추적하는 몬스터 AI를 만든다 근접하면 공격한다 일정 시간 이상 가까이 있으면 '분노 상태'로 전환하여 더 빨라진다 ✅ 프로젝트 생성 Unreal Engine 5 실행 새 프로젝트 > Games > First Person 템플릿 Wi
플레이어를 인식하고 추적하는 몬스터 AI를 만든다근접하면 공격한다일정 시간 이상 가까이 있으면 '분노 상태'로 전환하여 더 빨라진다플레이어 거리 감지 → 추적 → 공격 → 분노 상태 전환 로직을 담당.주요 변수핵심 메서드거리 체크 로직Behavior Tree 실행 및

/* RPG 스탯 관리 게임 시스템 이 프로그램은 간단한 RPG 캐릭터의 스탯을 관리하는 게임입니다. 사용자는 포션을 사용하고, 스탯을 강화하며, 스킬을 사용할 수 있습니다. */ // 라이브러리 포함 (다른 사람이 만든 코드 가져오기) #include //
C++을 공부하며 반드시 마주치는 두 개의 큰 산, 포인터와 레퍼런스를 만났다. 처음에는 '그냥 변수 쓰면 되지 왜 이렇게 복잡한 게 필요할까?' 싶었지만, 그 이유를 알고 나니 C++의 깊은 매력을 느낄 수 있었다. 단순히 값을 복사하는 것의 비용 문제를 해결하고,
C++ 프로그래밍의 핵심 기초 문법을 실습 위주로 정리했다. 변수 선언부터 자료형별 연산, 입출력까지 직접 코드를 작성하며 기본기를 다졌다. 🚀 조건문(if)과 반복문(for)을 활용해 문제 해결 능력을 키웠고, 코드 재사용의 핵심인 함수를 값, 참조, 포인터 방식으
지난번에 포인터와 레퍼런스의 개념을 익혔고, 이제는 실전 코드로 제대로 다뤄보았다! 💪 포인터를 이용해 배열을 자유자재로 다루는 포인터 연산부터, 포인터 사용 시 가장 조심해야 할 메모리 접근 오류와 안전장치 nullptr까지 직접 코드를 짜며 경험해 보았다. 레퍼런
C++ 객체지향 프로그래밍의 핵심인 class에 대해 학습했다. 관련 데이터와 함수를 하나로 묶어 코드의 재사용성과 유지보수성을 높이는 방법을 배웠다. 💻 public, private 접근 제어자를 통한 캡슐화, 생성자를 이용한 객체 초기화, getter와 sette

절차지향 프로그래밍에서 벗어나 처음으로 C++ 객체 지향 프로그래밍(OOP)의 세계에 발을 들였다. 🐾 Player라는 부모 클래스를 만들고, 이를 상속받는 전사, 마법사 등 다양한 직업 클래스를 구현했다. 특히 부모 클래스의 포인터 하나로 모든 자식 객체를 다루는

기본 직업 시스템을 확장하여 Player와 Monster가 서로 상호작용하는 실제 전투 시뮬레이션을 구현했다. 헤더 파일 간에 서로를 참조할 때 발생하는 순환 참조 문제를 '전방 선언'이라는 기법으로 해결하는 중요한 경험을 했다. 💪 또한, while문을 이용한 전투
C++의 강력한 코드 재사용 도구인 템플릿(Template)에 대해 학습했다. 템플릿을 사용하면 int, double, string 등 다양한 자료형에 대해 동작하는 일반화된 함수나 클래스를 한 번만 정의하여 사용할 수 있다는 것을 배웠다. 🔥 이를 통해 타입별로 여
C++의 강력한 표준 템플릿 라이브러리인 STL(Standard Template Library)의 기초를 학습했다. 데이터를 효율적으로 관리하는 컨테이너(주로 vector와 map), 데이터를 처리하는 알고리즘(sort, find), 그리고 이 둘을 연결하는 반복자의
오늘은 좋은 객체지향 코드를 작성하기 위한 설계 원칙에 대해 깊이 있게 학습했다. 코드 품질을 측정하는 지표인 응집도와 결합도의 개념을 이해하고, "응집도는 높게, 결합도는 낮게" 유지하는 것의 중요성을 배웠다. 🚀 더 나아가, 유지보수와 확장이 용이한 소프트웨어를
오늘은 C++의 강력한 기능인 템플릿을 사용해 어떤 아이템이든 담을 수 있는 만능 인벤토리 클래스를 만들어봤다. 👜 동적 메모리 할당(new[])과 해제(delete[])를 직접 관리하며 메모리 누수(Memory Leak)를 막는 법을 익혔다. 생성자와 소멸자의 역할
오늘은 vector를 사용해서 객체들을 관리하는 연금술 공방 시스템을 만들었다. 🧪 단순히 데이터를 추가하고 전체를 보는 것에서 나아가, 물약 이름이나 재료로 원하는 레시피를 찾아내는 검색 기능을 구현했다. 특히 cin으로 숫자를 받고 getline으로 문자열을 받을

C++의 객체 지향 특성 중 하나인 다형성(Polymorphism)을 활용하여 영화 관리 시스템을 구현하는 방법을 학습한다. 🎬 MovieManager 클래스가 영화 데이터를 관리하고, MovieProcessor 인터페이스를 통해 다양한 방식으로 영화 목록을 처리한다
이번 학습에서는 Observer 패턴을 이해하고 직접 코드로 구현했다. 😎 DeliveryService(Subject)가 상태를 관리하고, 여러 Customer(Observer)들에게 알림을 전달하는 구조를 실습했다. ✍️Observer 패턴의 기본 구조 이해 C+
오늘은 언리얼 엔진에서 AActor를 상속받아 랜덤 이동(Random Walk) 을 구현했다.Step()은 X/Y축 이동을 결정하고, ShouldTriggerEvent()는 50% 확률로 이벤트를 발생시킨다.10번 이동 후 총 이동 거리와 이벤트 발생 횟수를 로그로 확
언리얼 엔진에서 액터의 랜덤 워크와 시각화를 구현하는 방법을 학습했습니다. ✨AActor를 상속받아 메시 컴포넌트를 추가하고, 월드 공간에서 액터를 이동시키며, 디버그 드로우와 동적 머티리얼을 사용하여 이동 경로와 이벤트를 시각적으로 표현합니다. 🚀AActor에 US
오늘은 C++ 객체 지향 프로그래밍의 근간을 이루는 struct와 class, 그리고 다형성의 핵심인 가상 함수와 순수 가상 함수에 대한 이론을 깊이 파고들었다. 모의 면접과 테스트를 통해 어렴풋이 알던 개념들의 차이와 그 존재 이유를 명확히 이해하게 되었다. 특히 c
오늘은 C++의 꽃이라 불리는 다형성에 대해 깊이 파고들었다. 모의 면접을 통해 내가 놓치고 있던 중요한 디테일들을 발견했다. 특히 가상 함수 테이블(vtable)이 언제 생성되고, 사용하는 데 어떤 비용이 드는지 정확히 알게 되었다. 단순히 '어떻게 쓰는가'를 넘어
오늘은 C++의 RTTI와 4대 캐스팅 연산자에 대해 공부했다. 개념 자체는 알고 있었지만, 모의 면접을 통해 dynamic_cast가 동작하기 위한 정확한 조건을 내가 잘못 알고 있었다는 것을 깨달았다. 🤯 단순히 '가상 함수가 필요하다'를 넘어, 왜 그것이 '다형
오늘은 C++의 메모리 관리 핵심인 RAII와 스마트 포인터에 대해 깊이 파고들었다. 개념은 안다고 생각했는데, 모의 면접을 통해 내가 '무엇'인지는 알지만 '왜' 그렇게 동작하는지에 대한 이해가 부족했다는 것을 알게 되었다. 🧐 RAII가 단순히 '소멸자'를 의미하
오늘은 C++ STL의 핵심 컨테이너인 map과 vector에 대해 깊이 파고들었다. 두 컨테이너의 시간 복잡도나 기본적인 특징은 자신 있었는데, 멤버 함수들의 미묘한 동작 차이에서 허점을 보였다. 😅 특히 map에 이미 존재하는 키를 삽입할 때의 동작과, vecto
Day 45 Understanding Templates and Complexity오늘은 C++의 템플릿과 알고리즘의 시간/공간 복잡도에 대해 복습했다. 템플릿이 단순히 코드를 재사용하는 편리한 도구라고만 생각했는데, 컴파일 타임에 코드를 생성하는 원리 때문에 발생하는
오늘은 언리얼 엔진 C++의 핵심인 액터(Actor)에 대해 깊이 파고들었다. 단순히 C++ 클래스를 생성하는 것에서 그치지 않고, 눈에 보이도록 컴포넌트(Component)를 추가하고, 액터의 생성부터 소멸까지의 과정인 라이프사이클(Lifecycle)을 이해했다. 마
오늘은 3인칭 캐릭터를 완성했다. 먼저 게임모드(GameMode)와 플레이어 컨트롤러(PlayerController), 캐릭터(Character) 클래스의 관계를 이해하고 C++로 기본 뼈대를 만들었다. 그 후 Enhanced Input System을 사용해 입력 체계
오늘은 게임의 핵심 시스템 중 하나인 아이템 시스템을 설계했다. 먼저 C++ 인터페이스(Interface)를 활용해 확장성 높은 아이템 클래스 구조를 설계하고, 이를 상속받아 코인, 힐링 아이템, 지뢰 등 다양한 아이템 클래스를 만들었다. 이후 아이템을 레벨에 무작위로
오늘은 UMG (Unreal Motion Graphics)를 사용하여 게임 시작을 위한 메인 메뉴, 실시간 정보를 보여주는 인게임 HUD, 그리고 게임 오버 화면까지 전체 UI 흐름을 구축했다. C++의 데이터를 UI 위젯에 연결하는 방법을 배우고, 캐릭터의 머리 위에

오늘은 언리얼 엔진에서 C++를 사용하여 동적인 퍼즐 스테이지를 만드는 과제를 진행했다. 움직이는 발판, 회전하는 발판, 그리고 나타났다 사라지는 발판을 각각의 C++ Actor 클래스로 구현했다. 또한, 이들을 게임 시작 시점에 랜덤한 위치와 속성으로 자동 생성하는

오늘은 언리얼 엔진의 Character 클래스가 아닌, 가장 기본 단위인 "Pawn 클래스"를 사용하여 3D 캐릭터를 직접 구현하는 학습을 진행했다. CharacterMovementComponent의 도움 없이, CapsuleComponent, SkeletalMeshC
오늘은 지난번 Pawn 클래스 만들기에 이어 도전 과제를 수행했다. 먼저 캐릭터를 6자유도(6-DOF)로 움직이는 드론처럼 만들고, Q/E 키를 눌렀을 때 기체가 자연스럽게 기울어지는 효과까지 구현했다. 여기서 한 단계 더 나아가, 언리얼의 물리 엔진을 사용하지 않고
어제는 C++로 드론의 6-DOF 움직임을 직접 구현했다. 오늘은 여기서 한 단계 더 나아가, 드론이 스스로 목표 고도를 유지하는 "자동 호버링" 기능에 도전했다. 이를 위해 메카트로닉스 전공 수업에서 이론으로만 배웠던 PID 제어를 언리얼 엔진에 직접 구현해보았다.
기존에 만들었던 아이템 수집 게임의 기본 골격 위에 새로운 게임 플레이와 UI/UX를 덧씌우는 리팩토링 및 확장 작업을 진행했다. 이번 과제의 핵심은 "멀티 웨이브 시스템"을 도입하여 게임의 깊이를 더하고, 기존의 투박했던 UI를 "전면 리뉴얼"하여 시각적 완성도를 높
오늘은 언리얼 엔진의 AI 시스템을 사용해 간단한 인공지능 캐릭터를 만들어 보았다. 평소에는 정해진 반경 내를 무작위로 돌아다니다가, 플레이어를 발견하면 쫓아오도록 구현했다. Navigation System을 이용한 이동과 Perception System을 이용한 감지
언리얼 엔진으로 팀 프로젝트를 진행하다 보면 Git의 용량 제한이라는 큰 벽에 부딪히게 된다. 특히 무료 버전의 GitHub는 100MB 이상의 파일을 올릴 수 없고, 월별로 제공되는 스토리지와 대역폭(Bandwidth)도 넉넉하지 않다. 이번 학습에서는 .gitign
오늘은 AI를 한 단계 더 똑똑하게 만드는 행동 트리(Behavior Tree)와 블랙보드(Blackboard)에 대해 공부했다. 단순히 타이머로 정해진 행동만 반복하는 게 아니라, AI가 스스로 상황을 '기억'하고 그 기억을 토대로 '판단'해서 행동하게 만드는 방식이
SpartaGame의 레벨을 순차적으로 클리어하는 방식에서 벗어나, 하나의 레벨 안에서 여러 웨이브(Wave)가 진행되는 구조로 게임 루프를 재설계했다. 이를 위해 GameState에 웨이브 정보와 타이머를 관리하는 로직을 집중시켰다. 또한, 플레이 경험을 향상시키기
지난번 필수 기능 구현에 이어, 이번에는 게임을 한층 더 다채롭게 만들어 줄 도전 과제들을 구현했다. 😵 플레이어에게 부정적인 효과를 주는 디버프 아이템을 추가하고, 웨이브가 진행될수록 맵 환경이 동적으로 변하도록 설계했다. 마지막으로 UI 애니메이션과 3D 위젯을
성공적인 팀 프로젝트는 코드를 작성하기 전, 명확한 규칙을 정하는 단계에서부터 시작된다. 프로젝트의 목표와 방향성을 통일하고, 체계적인 개발 및 소통 규칙을 수립해야 추후 발생할 수 있는 수많은 비효율과 갈등을 예방할 수 있다. 이는 단순히 좋은 결과물을 넘어, 팀원
싱글플레이어 슈팅 게임을 완성하고, 드디어 멀티플레이어의 세계로 첫발을 내디뎠다. 이번 포스트는 멀티플레이 학습의 시작으로, 가장 기본이 되는 채팅 프로젝트의 구조를 잡는 과정을 다룬다. 기존에 알고 있던 게임 프레임워크(게임모드, 플레이어 컨트롤러)가 서버와 클라이언
오늘은 멀티플레이 게임의 심장이라 할 수 있는 '서버'의 종류에 대해 깊이 파고들었다. 플레이어가 직접 서버를 여는 '리슨 서버'와, 게임사에서 제공하는 별도의 '데디케이티드 서버'의 개념과 장단점을 명확히 구분했다. 특히 데디케이티드 서버 환경에서 클라이언트가 접속하

멀티플레이 개발의 가장 큰 혼란은 "똑같은 코드가 대체 어디서 실행되는 거지?"라는 질문에서 시작된다. 오늘은 이 혼란을 해결해 줄 NetMode 라는 '네트워크 신분증'에 대해 학습했다. 더 나아가, 이 신분증이 어떤 원리로 발급되는지를 이해하기 위해 네트워크 통신의

지난 시간에는 NetMode를 통해 '컴퓨터'의 역할을 구분했다면, 오늘은 더 깊이 들어가 개별 '액터'의 역할을 구분하는 NetRole 에 대해 학습했다. 서버에 존재하는 진짜 '실체(Authority)' 와 클라이언트에 복제된 '허상(Proxy)' 이라는 핵심 개념

드디어 멀티플레이의 꽃이라 불리는 RPC(Remote Procedure Call)의 세계에 입문했다. 오늘은 클라이언트와 서버가 어떻게 '대화'하는지를 중심으로 RPC를 파고들었다.

데디케이티드 서버(Dedicated Server) 구조에서 클라이언트끼리는 직접 대화할 수 없다. 채팅 시스템을 구현하려면 '클라이언트 -> 서버 -> 모든 클라이언트'로 이어지는 릴레이 방식이 필요하다.

지난 시간까지는 단순히 말을 전달하는 '채팅 시스템(RPC)'을 만들었다면, 오늘은 진짜 게임의 규칙이 돌아가는 '숫자 야구 게임 로직'을 구현했다. > 핵심은 코드를 아무 데나 짜는 게 아니라, 역할에 맞는 클래스(GameMode, PlayerState, Player

멀티플레이 개발을 하다 보면 서버와 클라이언트의 로그가 뒤섞여서 대체 누가 실행한 코드인지, 어떤 순서로 호출되는지 알기 어려울 때가 많다.오늘은 서버/클라이언트를 구분하는 커스텀 로그 매크로를 만들고, 실제 로그를 한 줄 한 줄 뜯어보며 '서버 시작 -> 로그인 ->

지금까지는 "데이터를 어떻게 보낼까?"를 고민했다면, 오늘은 "어떻게 효율적으로 보낼까?"를 배웠다. 변수가 바뀔 때만 로직을 실행하는 RepNotify, 전송 빈도를 조절하는 Frequency, 변하지 않는 액터를 잠재우는 Dormancy까지. 네트워크 대역폭과 CP

네트워크 대역폭은 무한하지 않다. 서버는 모든 클라이언트에게 모든 데이터를 보낼 수 없다. 그래서 "누구에게 보낼 것인가?(Relevancy)"와 "누구에게 먼저 보낼 것인가?(Priority)"를 결정하는 규칙이 필요하다. 오늘은 서버의 데이터 전송 최적화 전략인 R

싱글플레이 환경에서는 SpawnActor 함수 호출만으로 액터 생성이 가능했으나, 멀티플레이 환경에서는 클라이언트가 생성한 액터가 타인에게 보이지 않는 동기화 문제가 발생한다. 이를 해결하기 위해 Server RPC를 활용하여 서버에 생성을 요청하는 구조를 구현하고,

지금까지 배운 RPC와 Replication 기술을 총동원하여, 멀티플레이 캐릭터의 핵심인 이동(애니메이션), 시선(AimOffset), 공격(판정), 상태(HP)를 동기화했다. 단순히 변수만 맞추는 게 아니라, 서버의 권한(Authority)과 클라이언트의 예측(Pr

지금까지는 에디터에서 플레이 버튼을 누르면 자동으로 서버에 접속되는 방식이었다. 하지만 실제 배포될 게임은 '타이틀 화면'에서 IP를 입력하고 접속하는 과정이 필수적이다.오늘은 타이틀 전용 레벨과 게임모드를 별도로 제작하여 수동으로 서버에 접속하는 기능을 구현하고, 레

이제 플레이어가 들어온 후 '대기 -> 게임 시작 -> 결판 -> 재시작'으로 이어지는 게임의 완전한 순환(Game Loop)을 만들 차례다.오늘은 GameMode(심판)와 GameState(현황판)를 이용해 게임의 상태를 관리하고, 승패가 결정되면 결과 화면을 띄운

전형적인 최적화 문제로, "최적 부분 구조"를 이용하여 동적 계획법(DP)으로 상향식(Bottom-up)으로 해결했다.목표: 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중 거쳐간 숫자의 합이 가장 큰 최댓값을 구하는 것이 목표이다.제약 조건: 삼각형의 높이 $N$은 1

이 문제는 컴퓨터 간의 연결 정보를 바탕으로 독립된 네트워크(연결 요소)의 개수를 구하는 문제다. 그래프 탐색 알고리즘인 DFS(깊이 우선 탐색)를 사용하여, 방문하지 않은 노드에서 시작해 연결된 모든 노드를 방문 처리하는 방식으로 해결했다. 특히 C++에서 재귀 함수

이 포스트는 삽입, 최댓값 삭제, 최솟값 삭제를 모두 지원하는 이중 우선순위 큐(DPQ)를 효율적으로 구현하는 방법을 다룬다. 일반적인 std::priority_queue나 std::map 대신 std::multiset을 선택해야 하는 이유를 분석하고, 최댓값을 삭제할

이번 포스트에서는 야근 피로도를 최소화하는 문제를 그리디(Greedy) 알고리즘으로 해결한 과정을 정리했다. 피로도를 최소화하려면 가장 큰 작업량을 우선적으로 처리해야 한다는 직관을 바탕으로 풀이를 시작했다. 최댓값 추출에는 일반적으로 std::priority_queu

이번 포스트는 주어진 단어 집합 내에서 "begin" 단어를 "target" 단어로 변환하는 가장 짧은 변환 과정의 단계를 찾는 문제 풀이를 다뤘다. 한 번에 한 글자만 바꾸는 제약 조건이 있었고, 이는 곧 가중치가 없는 그래프에서의 최단 경로를 찾는 문제임을 파악했다

이번 포스트에서는 폭우로 물에 잠긴 격자에서 집(1, 1)에서 학교(m, n)까지 갈 수 있는 최단 경로의 개수를 구하는 문제를 다루었다. 최단 경로의 개수를 세는 문제는 전형적인 동적 계획법(DP) 문제로, 이전 지점의 경로 수를 합산하여 현재 지점의 경로 수를 계산

B팀이 A팀의 출전 순서를 보고 승점을 최대로 얻는 방법을 찾는 문제다. 핵심은 "이길 수 있으면 가장 근소한 차이로 이기고, 이길 수 없으면 가장 작은 패를 버리는 것"이다. $N$이 최대 10만이라 $O(N^2)$ 탐색은 불가능하며, 정렬(Sorting)과 투 포인

자연수 n개의 합이 s가 되면서, 그 원소들의 곱이 최대가 되는 집합을 구하는 문제다. 핵심은 "곱이 최대가 되려면 수들이 최대한 균등해야 한다"는 수학적 직관이다. 이를 이용해 몫과 나머지를 계산하여 $O(N)$에 해결했다.목표: 합이 $s$인 $n$개의 자연

모든 차량이 최소 한 번은 단속카메라를 만나도록 하려면 최소 몇 대가 필요한지 구하는 문제다. 구간(Interval) 문제의 핵심은 정렬이다. 보통 '끝나는 지점'을 기준으로 정렬하지만, 발상을 전환하여 '시작 지점'을 기준으로 내림차순 정렬하면 코드가 훨씬 간결해진다

$N$개의 아파트에 4g 기지국을 5g로 변경하면서 전파가 닿지 않는 구간을 최소한의 기지국 증설로 커버하는 문제다. $N$이 최대 2억이므로 $O(N)$ 풀이는 불가능하며, 기존 기지국 사이의 "빈 구간 길이"만 계산하여 $O(\\text{stations})$에 해결

장르별로 가장 많이 재생된 노래를 두 곡씩 뽑아 앨범을 만드는 문제다. 여러 정렬 기준(장르 총합 $\\rightarrow$ 노래 재생 수 $\\rightarrow$ 고유 번호)을 만족시켜야 한다. 해시(Hash)를 이용해 데이터를 집계하고, 음수 변환(-1) 테크닉을

원형으로 연결된 스티커를 뜯어 최댓값을 만드는 문제다. "인접한 것을 사용할 수 없다"는 조건에서 전형적인 DP 점화식을 유도해냈고, "원형"이라는 특수한 조건을 두 개의 일직선 문제로 쪼개어 해결했다.목표: 인접한 스티커를 뜯지 않으면서 합이 최대가 되도록 선택하기.

가려진 불량 사용자 아이디 목록을 보고, 제재 대상이 될 수 있는 아이디 목록의 경우의 수를 구하는 문제다. $N$이 8 이하로 매우 작다는 점을 이용해 DFS(백트래킹)로 모든 경우를 탐색하고, set 자료구조를 활용해 중복된 목록을 제거하는 것이 핵심이다.목표: b

진열된 모든 종류의 보석을 적어도 1개 이상 포함하는 가장 짧은 구간을 찾는 문제다. 이중 반복문($O(N^2)$)은 시간 초과가 발생하므로, 투 포인터(Two Pointers) 알고리즘을 사용하여 $O(N)$의 시간 복잡도로 해결해야 한다.목표: 모든 보석 종류를 포

카카오 채용 연계형 인턴십 기출문제로, 징검다리를 건널 수 있는 최대 인원을 구하는 문제다. 디딤돌의 숫자가 최대 2억까지 주어지기 때문에 단순 시뮬레이션으로는 시간 초과가 발생한다. 이분 탐색(Binary Search)을 활용하여 건널 인원수를 먼저 정하고, 그 인원

그래프에서 1번 노드로부터 가장 멀리 떨어진 노드의 개수를 구하는 문제다. 가중치가 없는 그래프에서의 최단 거리는 BFS(너비 우선 탐색)를 사용하는 것이 정석이다. 노드(N)와 간선(E)의 개수가 많으므로 인접 리스트를 활용해 $O(N+E)$로 해결해야 한다.목표:

섬 사이에 다리를 놓는 비용이 주어졌을 때, 모든 섬을 통행 가능하게 만드는 최소 비용을 구하는 문제다. 최소 신장 트리(MST)를 구하는 대표적인 문제로, 비용이 낮은 간선부터 선택하는 그리디(Greedy) 방식과 사이클 생성을 막기 위한 유니온-파인드(Union-F

DAY93 Algorithm : Travel Route주어진 항공권을 모두 사용하여 여행 경로를 짜는 문제다. 모든 티켓을 소모해야 하며, 가능한 경로가 여러 개일 경우 알파벳 순서가 앞서는 경로를 선택해야 한다. DFS(깊이 우선 탐색)를 통해 경로를 깊게 탐색하되,

강철부대원들이 각자의 위치에서 부대로 복귀하는 최단 시간을 구하는 문제다. 부대원은 여러 명이지만 목적지는 하나다. 각 부대원마다 BFS를 돌리면 시간 초과가 발생하므로, 목적지에서 출발하여 모든 지역으로 퍼져나가는 BFS를 단 한 번만 수행하는 '역발상'이 핵심이다.

수열에 \[1, -1, ...] 또는 \[-1, 1, ...] 패턴을 곱했을 때 나올 수 있는 연속 부분 수열의 합 중 최댓값을 구하는 문제다. 부분 수열의 합을 구하는 가장 빠른 방법인 카데인 알고리즘(Kadane's Algorithm)을 두 가지 펄스 패턴에 동시에

입국심사를 기다리는 거대한 인원($10^9$명)을 처리하기 위한 최소 시간을 구하는 문제다. 대기 인원수가 너무 많아 시뮬레이션은 불가능하다. 대신 "특정 시간($T$)이 주어졌을 때 $N$명을 처리할 수 있는가?"를 확인하는 파라메트릭 서치(Parametric Sea

격자판에서 출발지부터 목적지까지 경주로를 건설하는 최소 비용을 구하는 문제다. 직선 도로와 코너의 건설 비용이 다르기 때문에, 단순한 최단 거리가 아닌 '방향(Direction)'을 포함한 최소 비용을 계산해야 한다. 이를 위해 BFS와 3차원 배열을 활용하여 상태를
비동기 공격 흐름 제어: FOnPerformAttackEndDelegate 델리게이트를 생성하여, 몽타주 애니메이션 종료 시점을 비헤이비어 트리가 인지하도록 구현.무기 장착 시스템: 몬스터 메쉬의 손 뼈(Hand Bone)에 소켓을 추가하고 검(Sword) 메쉬를 부착
무기 충돌 감지 구현: On Component Begin Overlap 이벤트를 사용하여 무기와 몬스터의 충돌 시점을 캐치하는 로직 완성.이벤트 노드 생성 방식 숙지: 특정 컴포넌트(Box/Capsule)에 종속된 이벤트는 그래프 우클릭 검색이 아닌, 디테일 패널이나
Motion Warping 적용: 공격 시 몬스터와의 거리를 좁히거나, 회피 시 정확한 위치로 이동하도록 애니메이션 보정 기능 구현.Root Motion 설정: 워핑의 기준이 되는 이동 데이터를 확보하기 위해 원본 애니메이션 시퀀스의 Enable Root Motion
AI 감지 분기 처리: OnTargetPerceptionUpdated 이벤트를 활용하여 플레이어 발견(Sensed)과 놓침(Lost) 상태를 명확히 구분하는 로직 구현.오작동 방지 필터링: 단순히 무언가를 감지한 것이 아니라, 그 대상이 플레이어 캐릭터인지 확인하는 2
Niagara 피격 FX 적용: 몬스터 피격 시 애니메이션만 재생되던 밋밋한 타격감을 개선하기 위해 BloodBurst 등의 Niagara 이펙트 추가.재사용 가능한 FX 구조 설계: MonsterBase 클래스에 HitFX (Niagara System) 변수를 노출시
돌진 공격 모션 워핑 적용: 몬스터가 플레이어를 향해 돌진하며 공격하는 애니메이션에 Motion Warping(Location, Rotation)을 적용하여 정밀한 타격 구현.Warp Location Offset 설정: 플레이어의 실제 위치로 순간이동하듯 겹치는 것을
EQS 포지셔닝 로직 개선: 몬스터가 전투 중 자리를 잡을 때(EQS) 사용하는 내적(Dot Product) 계산의 기준 좌표를 변경.불필요한 횡이동(Strafe) 제거: 플레이어가 등을 보이고 도망가는 상황에서는 몬스터가 굳이 측면으로 돌지 않고 즉시 추격하여 공격하