2026.01.08

박민재 (Daype)·2026년 1월 8일

알고리즘 코드카타 : 정수 내림차순으로 배치하기

내가 생각한 구현 설계 의사코드 :

1. 입력받은수의 각 자릿수를 구하기
2. 해당 자릿수들을 int형 벡터에 삽입
3. 벡터를 내림차순으로 정렬
4. 정렬된 벡터의 앞순서부터 더해서 10곱하기

실제구현 :

  1. int형 벡터 num을 선언하고 while문을 통해 주어진수의 자릿수를 구해서 num에 대입

  1. 자료구조 sort함수를 통해 벡터를 내림차순으로 정렬

  1. 벡터의 자릿수만큼 순회하는 for문 을통해 마지막 자릿수는 10을 곱하기전에 탈출하도록 조건문작성 후 마지막 자리가 아닐경우 해당 인덱스에 해당하는 벡터를 결과값에 더하고 10곱하기

테스트 케이스

통과확인

제출 결과 : +2점 코드 확인
잘한점 : sort함수와 자료구조 vector를 떠올려서 해결한점
부족한점 : greater 함수의 존재, 곱셈을 먼저하고 더하면 마지막 자릿수 예외처리 불필요.


UnrealEngine 1-5강 정리노트

Actor의 LifeCycle

언리얼 엔진에있는 모든 객체들은 오브젝트라는 최상위 클래스를 상속받는다.
언리얼 엔진에서 필요한 객체를 생성시 오브젝트 클래스를 상속받는 필요한 기능을 가진 클래스 객체를 생성하게된다.
언리얼 엔진에는 LifeCycle 이라는 생명주기 개념이 존재하는데 대표적으로 6가지가 있다.

1.생성자 constructor
2.postInitializeComponents
3.BeginPlay
4.Tick
5.Destroyed
6.EndPlay
  • 생성자는 c++ 개념에서 배웠던것처럼 객체가 생성될때 딱 한번 호출되는 함수이다.
  • PostInitializeComponents 함수는 언리얼에서 제공되는 함수로 객체의 모든 컴포넌트가 준비된 상태 이후 호출되는 함수이다 해당 함수에서는 컴포넌트 끼리 주고받을 데이터가 필요한경우 처리를 해줄 수있다.
  • BeginPlay는 프로젝트가 시작할때 호출되는 함수이다. 프로젝트가 시작할때가되면 필요한 다른모듈의 객체들도 생성이 되어있는 상태이므로 상황에 맞는 정보처리를 해줄 수 있다.
  • Tick는 프로젝트가 시작한 이후 1프레임마다 호출되는 함수이다. 해당함수에서는 진행에 필요한 부드러운 움직임이나 지속적으로 필요한 작업을 처리해 줄 수 있는데 매프레임마다 호출되기때문에 사용시 주의가 필요하다.
  • Destroyed 생성된 객체가 파괴되기 직전에 호출되는 함수이다. 해당 함수에서는 객체의 파괴 이펙트나 사운드 처리를 해줄 수 있다.
  • EndPlay는 Destroyed함수가 호출된 다음에 즉시 호출되는 함수이다. 단, 예외적으로 프로그램을 강제종료했을때 EndPlay 함수가 호출되게끔 언리얼 엔진에는 설계되어있다. 즉, 객체를 파괴할경우 Destroyed 와 Endplay가 호출되고 프로젝트를 바로 종료할경우 EndPlay만 호출되는 차이점이 있다.

해당 함수들을 LifeCycle 라고 하는데 각각 상황에맞게 사용할 경우 여러가지 정보처리나 데이터처리등 오브젝트를 체계적으로 관리하는데에 도움이된다.


UnrealEngine 1-6강 정리노트

TransFormTick함수

TransForm : 언리얼에서 물체의 움직임에 필요한 요소들을 모아놓은 명칭

  • Location 이동 : 물체의 이동좌표
  • Rotation 회전 : 물체의 회전
  • Scale 크기 : 물체의 크기

Tick : 매 프레임마다 호출되는 함수로 인자로 DeltaTime 을 가지고있다.

  • DeltaTime : Tick함수가 매 프레임마다 호출되는데 각 환경마다 프레임이 다를 수 있다.
    그럴경우 어떤 상황에서는 프레임을통해 이득을 보는 상황이 생기고 반대로 어떤 상황에서는 프레임을통해 상대적으로 손해를 보는 상황이 생긴다 두 상황에서의 명확한 기준을 잡아주기위해 만들어진 시스템으로 초 / 프레임을 한 값이다. 이렇게 될경우 각환경마다 나오는 값이 다른데 그 값을 Tick 내부에서 처리하는 회전이나 지속적인 움직임에 곱하게 되면 똑같은 평균값을 가지게 되는 구조이다.

학습 예시 코드 :

시작할때 BeginPlay함수에 상태가 변화된 후 시간이 흐를때마다 지속적으로 Tick 함수에 의해 상태가 변화한다. 이때, Tick 함수는 지속적으로 호출되는 함수기 때문에 성능적으로 작업을 최소화 해야한다 때문에 if() 조건식으로 물체의 회전속도가 존재할때만 회전을 하게끔 설정해주어야하는데, 이때 float값은 부동소수점을 나타냄으로 0.0f 로 조건을 정하게 될경우 미세한 값의 차이때문에 계속 작업이 일어나게된다. 그것을 고려하여 언리얼엔진에서 제공하는 FMath::IsNearlyZero 구조체를 이용하게되면 0과의 근접한 모든 값을 0으로 처리해준다. 이코드를 이용하여 작업을 효율적으로 처리할 수 있다.

+ 언리얼에서 제공하는 FRotator 을 사용할경우 짐벌락 문제가 발생 할 수 있음 해당 문제가 발생하는 개념과 해결방법은 궁금하면 직접 찾아보기

키워드

  • 짐벌락, 오일러각, 쿼터니언

UnrealEngine 1-7강

클래스와 리플렉션 시스템

리플렉션 시스템 : 블루프린트와 c++를 서로 연동하여 작업을 할 수 있도록 도와주는 시스템

블루프린트C++ 의 차이

블루프린트

장점 :

  • 노드기반의 로직을 구현할 수 있어서 프로그래머가 아니어도 접근하기쉽다.
  • 빌드 작업이 없어서 작업이 간편하다

단점 :

  • 방대한 작업량을 노드로만 관리하는 것은 불가능 유지보수 힘듦
  • c++로 이미작업한것을 노드화 한것이기때문에 작업속도가 느림 무거운연산에
    적용했을경우 매우 느려짐

디자이너나 빠른작업을 위한 툴
UI,시네마틱,프로토타이핑,애니메이션 사용

C++

장점 :

  • 엔진이 c++로 이루어져 있기때문에 엔진레벨에서 커스터마이징이 가능하고 속도가 최적하다
  • 여러가지 라이브러리등 대부분 사용가능하다
  • 유지보수가 매우 좋음

단점 :

  • 빌드 작업이 굉장히 번거로움
  • 접근하기 어려움

실제현업에서는 블루프린트 C++ 모두 사용

리플렉션 시스템

Generated 헤더파일 : 리플렉션 시스템을 지원하는데 가장필수적인 헤더파일, 언리얼엔진에서 자동생성, 항상 참조되는 헤더파일중에서 가장 밑에 있어야한다.

UCLASS : 클래스를 리플렉션에 등록시켜주는 매크로

GENERATED_BODY : 리플렉션에 등록하기위한 여러가지 코드들을 담은 매크로 UCLASS 와 세트

UPROPERTY : C++ 에서 구현한 변수들을 리플렉션 시스템에 등록하는 매크로.

UFUNCTION : C++ 에서 구현한 함수들을 리플렉션 시스템에 등록하는 매크로.

리플렉션 시스템에 인자를 전달하여 C++블루프린트 를 오가며 작업을 할 수 있게 커스터마이징이 가능하다.

전체 구현부 코드


0개의 댓글