TIL

3/16일자 TIL

오딘.L.스트레인지 2026. 3. 16. 19:24

코드카타-햄버거 만들기

#include <vector>
using namespace std;

int solution(vector<int> ingredient) {
    int answer = 0;
    vector<int> st;
    st.reserve(ingredient.size()); // 성능에 도움

    for (int x : ingredient) {
        st.push_back(x);

        // st 크기가 4 이상일 때만 검사
        if (st.size() >= 4) {
            int n = (int)st.size();

            // TODO: 아래 조건을 채우세요 (끝 4개가 1,2,3,1인지)
            bool isBurger =
                (st[n - 4] == 1) &&
                (st[n - 3] == 2) &&
                (st[n - 2] == 3) &&
                (st[n - 1] == 1);

            if (isBurger) {
                // TODO: 4개 제거
                st.pop_back();
                st.pop_back();
                st.pop_back();
                st.pop_back();

                answer++;
            }
        }
    }

    return answer;
}

 

 

 

분반 수업

더보기
// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "InputActionValue.h"
#include "PlayerCharacterBase.generated.h"

UENUM(BlueprintType)
enum class EPlayerStates : uint8
{
	NONE UMETA(DisplayName = "NONE"),
	ATTACK UMETA(DisplayName = "ATTACK"),
	RUN UMETA(DisplayName = "RUN"),
};

UENUM(BlueprintType)
enum class EWeaponType : uint8
{
	NONE UMETA(DisplayName = "NONE"),
	SWORD UMETA(DisplayName = "SWORD"),
	SMALL_KNIFE UMETA(DisplayName = "SMALL_KNIFE")
};

UCLASS()
class DARK_SOUL_Z_API APlayerCharacterBase : public ACharacter
{
	GENERATED_BODY()

public:
	APlayerCharacterBase();

protected:
	virtual void BeginPlay() override;

public:	
	virtual void Tick(float DeltaTime) override;

	virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;


protected:
	UPROPERTY(EditAnywhere)
	class USpringArmComponent* SpringArm;

	UPROPERTY(EditAnywhere)
	class UCameraComponent* Camera;

private:
	void InitializationPlayerMesh();
	void InitializationWeaponMesh();
	void InitializationPlayerCamera();
	void InitializationInput();

	void Move(const FInputActionValue& Value);
	void Look(const FInputActionValue& Value);
	void Attack();
	void WeaponChange();

private:
	UPROPERTY(VisibleAnywhere, Category = "Input")
	class UInputMappingContext* DefaultContext;

	UPROPERTY(VisibleAnywhere, Category = "Input")
	class UInputAction* MoveAction;

	UPROPERTY(VisibleAnywhere, Category = "Input")
	class UInputAction* LookAction;

	UPROPERTY(VisibleAnywhere, Category = "Input")
	class UInputAction* AttackAction;

	UPROPERTY(VisibleAnywhere, Category = "Input")
	class UInputAction* WeaponChangeAction;


public:
	UPROPERTY(VisibleAnywhere)
	bool bIsSWORDWeaponChange; //1번키 무기 상태

	UPROPERTY(EditAnywhere)
	float mouseSpeed = 30.0f;

	UPROPERTY(EditAnywhere)
	float playerMoveSpeed = 600.0f;

private:
	UPROPERTY(EditAnywhere)
	class UStaticMeshComponent* weaponStaticMesh;

private:
	UPROPERTY(EditAnywhere)
	UAnimMontage* AttackMontage;

public:
	EPlayerStates playerState = EPlayerStates::NONE;
	EWeaponType weaponType = EWeaponType::NONE;

public:
	UPROPERTY(EditAnywhere, Category = "Sounds")
	USoundBase* AttackSound;


};
// Fill out your copyright notice in the Description page of Project Settings.


#include "Player/PlayerCharacterBase.h"
#include "GameFramework/SpringArmComponent.h"
#include "Camera/CameraComponent.h"
#include "EnhancedInputComponent.h"
#include "InputMappingContext.h"
#include "EnhancedInputSubsystems.h"
#include "Engine/Engine.h"
#include "Kismet/KismetMathLibrary.h"
#include "GameFramework/CharacterMovementComponent.h"
#include "TimerManager.h"
#include "Engine/World.h"
#include "Kismet/GameplayStatics.h"


APlayerCharacterBase::APlayerCharacterBase()
{
	PrimaryActorTick.bCanEverTick = true;

	InitializationPlayerMesh();
	InitializationPlayerCamera();
	InitializationInput();
	InitializationWeaponMesh();

	static ConstructorHelpers::FClassFinder<UAnimInstance> AnimInstance(TEXT("/Game/DarkSoulZ/Blueprints/Player/ABP_Player.ABP_Player_C"));

	if (AnimInstance.Class)
	{
		GetMesh()->SetAnimInstanceClass(AnimInstance.Class);
	}
}

void APlayerCharacterBase::BeginPlay()
{
	Super::BeginPlay();
	
	if (APlayerController* PlayerController = Cast<APlayerController>(GetController()))
	{
		if (UEnhancedInputLocalPlayerSubsystem* SubSystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PlayerController->GetLocalPlayer()))
		{
			SubSystem->AddMappingContext(DefaultContext, 0);
		}
	}

	GetCharacterMovement()->MaxWalkSpeed = playerMoveSpeed;
}

void APlayerCharacterBase::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

}

void APlayerCharacterBase::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
	Super::SetupPlayerInputComponent(PlayerInputComponent);

	UEnhancedInputComponent* EnhancedInputComponent = Cast<UEnhancedInputComponent>(PlayerInputComponent);

	EnhancedInputComponent->BindAction(MoveAction, ETriggerEvent::Triggered, this, &APlayerCharacterBase::Move);
	EnhancedInputComponent->BindAction(LookAction, ETriggerEvent::Triggered, this, &APlayerCharacterBase::Look);
	EnhancedInputComponent->BindAction(AttackAction, ETriggerEvent::Started, this, &APlayerCharacterBase::Attack);
	EnhancedInputComponent->BindAction(WeaponChangeAction, ETriggerEvent::Started, this, &APlayerCharacterBase::WeaponChange);
}

void APlayerCharacterBase::InitializationPlayerMesh()
{
	ConstructorHelpers::FObjectFinder<USkeletalMesh>
		PlayerSkeletalMesh(TEXT("/Script/Engine.SkeletalMesh'/Game/Characters/Mannequins/Meshes/SKM_Manny_Simple.SKM_Manny_Simple'"));

	if (PlayerSkeletalMesh.Succeeded())
	{
		GetMesh()->SetSkeletalMesh(PlayerSkeletalMesh.Object);
		GetMesh()->SetWorldLocationAndRotation(FVector(0, 0, -90), FRotator(0, -90, 0));
	}
}

void APlayerCharacterBase::InitializationWeaponMesh()
{
	weaponStaticMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("long_sword"));
	weaponStaticMesh->SetupAttachment(RootComponent);

	static ConstructorHelpers::FObjectFinder<UStaticMesh> weapon(TEXT("/Script/Engine.StaticMesh'/Game/DarkSoulZ/Asset/Weapons/Medieval_Long_Sword/long_sword/StaticMeshes/long_sword.long_sword'"));

	if (weapon.Succeeded())
	{
		weaponStaticMesh->SetStaticMesh(weapon.Object);
	}

	
	if (weaponStaticMesh)
	{
		weaponStaticMesh->AttachToComponent(GetMesh(), FAttachmentTransformRules::KeepRelativeTransform, TEXT("weapon_Socket"));

		weaponStaticMesh->SetVisibility(false);
	}

}

void APlayerCharacterBase::InitializationPlayerCamera()
{
	bUseControllerRotationYaw = false;
	
	UCharacterMovementComponent* MoveComp = GetCharacterMovement();
	if (MoveComp)
	{
		MoveComp->bOrientRotationToMovement = true;
	}

	SpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArm"));
	if (SpringArm)
	{
		SpringArm->SetupAttachment(RootComponent);
		SpringArm->SetWorldLocation(FVector(0, 0, 40));
		SpringArm->TargetArmLength = 350;
		SpringArm->SocketOffset = FVector(0, 0, 35);
		SpringArm->bUsePawnControlRotation = true;
	}

	Camera = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));
	if (Camera)
	{
		Camera->SetupAttachment(SpringArm);
	}


}

void APlayerCharacterBase::InitializationInput()
{
	static ConstructorHelpers::FObjectFinder<UInputMappingContext> InputContext(TEXT("/Script/EnhancedInput.InputMappingContext'/Game/DarkSoulZ/Input/IMC_Default.IMC_Default'"));
	if (InputContext.Object != nullptr)
	{
		DefaultContext = InputContext.Object;
	}

	static ConstructorHelpers::FObjectFinder <UInputAction> InputMove(TEXT("/Script/EnhancedInput.InputAction'/Game/DarkSoulZ/Input/Actions/IA_Move.IA_Move'"));
	if (InputMove.Object != nullptr)
	{
		MoveAction = InputMove.Object;
	}

	static ConstructorHelpers::FObjectFinder <UInputAction> InputLook(TEXT("/Script/EnhancedInput.InputAction'/Game/DarkSoulZ/Input/Actions/IA_Look.IA_Look'"));
	if (InputLook.Object != nullptr)
	{
		LookAction = InputLook.Object;
	}

	static ConstructorHelpers::FObjectFinder <UInputAction> InputAttack(TEXT("/Script/EnhancedInput.InputAction'/Game/DarkSoulZ/Input/Actions/IA_Attack.IA_Attack'"));
	if (InputAttack.Object != nullptr)
	{
		AttackAction = InputAttack.Object;
	}

	static ConstructorHelpers::FObjectFinder <UInputAction> InputWeaponChange(TEXT("/Script/EnhancedInput.InputAction'/Game/DarkSoulZ/Input/Actions/IA_WeaponChange.IA_WeaponChange'"));
	if (InputWeaponChange.Object != nullptr)
	{
		WeaponChangeAction = InputWeaponChange.Object;
	}
}


void APlayerCharacterBase::Move(const FInputActionValue& Value)
{
	if (playerState == EPlayerStates::ATTACK) return;

	const FVector2D Movement = Value.Get<FVector2D>(); // X : 좌/우 , Y : 앞/뒤

	const FRotator ControlRot = Controller ? Controller->GetControlRotation()  : FRotator::ZeroRotator;
	const FRotator YawOnly(0.f, ControlRot.Yaw, 0.f);

	const FVector Forward = UKismetMathLibrary::GetForwardVector(YawOnly);
	const FVector Right = UKismetMathLibrary::GetRightVector(YawOnly);

	AddMovementInput(Forward, Movement.Y);
	AddMovementInput(Right, Movement.X);
}

void APlayerCharacterBase::Look(const FInputActionValue& Value)
{
	FVector2D LookAxisVector = Value.Get<FVector2D>();
	AddControllerYawInput(LookAxisVector.X * GetWorld()->DeltaTimeSeconds * mouseSpeed);
	AddControllerPitchInput(LookAxisVector.Y * GetWorld()->DeltaRealTimeSeconds * mouseSpeed);
}


void APlayerCharacterBase::Attack()
{

	if (weaponType == EWeaponType::NONE)
		return;

	playerState = EPlayerStates::ATTACK;
	

	UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance();

	if (AttackMontage)
	{
		AnimInstance->Montage_Play(AttackMontage);
		
		
	}

	//람다 형식 : [캡처리스트](매개변수)->반환형 {실행코드};

	FTimerHandle AttackHandle;

	GetWorld()->GetTimerManager().SetTimer(
		AttackHandle,
		[this]() 
		{
			playerState = EPlayerStates::NONE;
		}, 1.5f,
		false);
}

void APlayerCharacterBase::WeaponChange()
{
	bIsSWORDWeaponChange = !bIsSWORDWeaponChange;

	bIsSWORDWeaponChange ? weaponType = EWeaponType::SWORD : weaponType = EWeaponType::NONE;

	if (weaponStaticMesh)
	{
		weaponStaticMesh->SetVisibility(bIsSWORDWeaponChange);
	}
}

 

숫자야구 과제 근황

오늘은 컨디션 난조로 쉬기로 하였다.

남은 3일 동안 잘 해내야겠다.

'TIL' 카테고리의 다른 글

3/18일자 TIL  (0) 2026.03.18
3월 17일자 TIL  (0) 2026.03.17
3월 13일자 TIL  (1) 2026.03.13
3/12일자 TIL  (0) 2026.03.12
3/11일자 TIL  (0) 2026.03.11