[TIL] 2025-02-03
2025-02-03 TILPermalink
알고리즘 문제Permalink
이 문제는 어떻게 풀어야 할지 생각이 잘 나지 않아 어렵다고 느껴졌습니다.
시간 복잡도와 공간 복잡도를 잘 작성한건지 고민됩니다.
프로그래머스 숫자 짝꿍
언리얼 엔진Permalink
스파르타 내배캠에서 애니메이션과 관련된 언리얼 엔진의 강의를 들었습니다.
애니메이션 블루프린트에 대한 기초적인 부분을 복습하고 정리해보았습니다.
[UE5] 애니메이션 블루프린트
애니메이션 블루프린트에서 상태 기계를 사용해보기 전에 필요한 변수들을 세팅하는 방법을 연습해보고, 정리해보았습니다.
[UE5] 애니메이션 블루프린트에서 필요한 변수 세팅하기
스파르타 내배캠Permalink
언리얼 엔진 과제Permalink
스파르타 내배캠의 과제를 수행했습니다.
프로젝트 시연 연상은 다음과 같습니다.
- 수평 이동 폰
- 입력을 바인딩 하고, 이동 및 회전 시키는 폰을 구현했습니다.
- 드론/비행체
- 입력을 바인딩 하고, 이동 및 회전 시키는 폰을 구현했습니다.
- 컨트롤러
- 각 폰에서 사용할 컨트롤러 클래스를 생성하고, 각 컨트롤러에서 사용하는 입력 컨텍스트를 매핑했습니다.
해당 과제의 평가 기준은 다음과 같습니다.
- 완성도
- C++로 Pawn 클래스를 올바르게 생성했는가?
- 캡슐/박스/스피어 등 충돌 컴포넌트가 루트로 설정되었는가?
- SkeletalMeshComponent, SpringArm, CameraComponent가 계층 구조로 Attach되어 3인칭 시점이 구성되었는가?
- GameMode에서 DefaultPawnClass가 해당 Pawn 클래스로 지정되었는가?
- WASD, 마우스 회전 입력을 Enhanced Input 액션으로 정의했는가?
- Input Mapping Context (IMC)에 액션을 바인딩하고, 프로젝트/레벨에서 이를 활성화했는가?
- SetupPlayerInputComponent()에서 액션을 올바르게 바인딩하여, MoveForward, MoveRight, Look 등 함수를 호출하도록 했는가?
- AddActorLocalOffset, AddActorLocalRotation 등을 통해 키보드(WASD)와 마우스 입력에 따라 Pawn이 움직이고 회전하는가?
- 이동 방향이 카메라 또는 Pawn의 전후좌우를 기준으로 올바르게 설정되었는가?
- 회전 시 마우스 이동 축(X, Y)에 따라 좌우/상하 시점이 정상적으로 변하는가?
- 이해도
- Unreal 엔진에서 Pawn이 어떻게 동작하며, PlayerController가 Pawn을 Possess해서 조작한다는 개념을 정확히 이해했는가?
- Pawn의 기본 라이프사이클에 대한 이해를 코드에서 확인할 수 있는가?
- 충돌 컴포넌트를 루트로 둬야 하는 이유를 알고 있는가?
- Enhanced Input에서 액션, 축, 매핑 컨텍스트, 바인딩의 관계를 명확히 파악하고 있는가?
- Pawn 이동 시 AddActorLocalOffset, AddActorRotation을 프레임 독립적으로 사용하기 위해 DeltaTime 처리를 이해하고 있는가?
- 카메라 회전과 Pawn 회전의 차이를 정확히 구분했는가?
- 우수성
- 6자유도 비행체 (드론) 형태로 구현해, 상하/전후/좌우 이동과 피치·롤·요 회전이 가능한가?
- Enhanced Input 액션을 세분화하여 매핑했는가?
- 시연 영상에서 비행체가 자유롭게 움직이며 충돌 처리도 잘 되는지 확인되는가?
- Pawn이 지면 위에서만 이동하는 것이 아니라, 공중에 있을 때 중력을 받아 서서히 낙하하는 로직이 구현되었는가?
- 착지 혹은 충돌 판정이 자연스럽게 처리되는가?
- 에어컨트롤 (공중에서의 WASD 제어)과 낙하 속도/중력 가속도 등 세부 파라미터가 적절히 조정되어 있는가?
위의 평가 기준에 맞게 전체적인 기능을 잘 구현했다고 생각합니다.
하지만 중력 및 낙하 구현에서는 조금 아쉬운 점들이 있는 것 같습니다.
챌린지반Permalink
다음과 같은 문제 풀이를 진행해보았습니다.
Q. n
개의 정수를 입력받아 벡터에 저장한 후, 연산 결과를 출력하세요.
사용자는 q
개의 질의를 입력할 수 있게 합니다.
각 질의는 두 개의 정수 l
과 r
로 구성되며, 이는 벡터의 구간 [l, r]
의 합을 계산하라는 의미입니다.
다음은 저의 풀이입니다.
#include <iostream>
#include <Vector>
#include <numeric>
int main()
{
// 숫자의 개수
int n;
std::cin >> n;
// 숫자를 저장할 벡터
std::vector<int> numList(n);
// n번 벡터에 저장될 숫자 입력 및 저장
for (int i = 0; i < numList.size(); ++i)
{
std::cin >> numList[i];
}
// 문제의 개수
int q;
std::cin >> q;
for (int i = 0; i < q; ++i)
{
// 시작 위치와 끝 위치
int l, r;
std::cin >> l >> r;
// 시작 인덱스와 끝 인덱스 구하기
std::vector<int>::iterator first = numList.begin() + l - 1;
std::vector<int>::iterator last = numList.begin() + r;
// 시작 인덱스부터 끝 인덱스의 숫자 합 출력
std::cout << std::accumulate(first, last, 0) << std::endl;
}
}
댓글남기기