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개의 질의를 입력할 수 있게 합니다.
각 질의는 두 개의 정수 lr로 구성되며, 이는 벡터의 구간 [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;
	}
}

Date:     Updated:

카테고리:

태그:

TIL 카테고리 내 다른 글 보러가기

댓글남기기