분류 전체보기
-
프로그래머스 Lv2 땅따먹기Computer Science/프로그래머스 2023. 10. 6. 11:22
더보기 이 문제는 DP로 풀면 된다. 0번째 행에서 접근하는 방법을 찾아보자. 1 2 3 5 5 6 7 8 4 3 2 1 100 1 2 3 1번째 행 입장으로 생각하면 1번째 행에서 0번 열을 선택하면 {2, 3, 5}중 한가지를 선택해야 하므로 5를 선택한다. 1번째 행에서 1번 열을 선택하면 {1, 3, 5}중 한가지를 선택해야 하므로 5를 선택한다. 1번째 행에서 2번 열을 선택하면 {1, 2, 5}중 한가지를 선택해야 하므로 5를 선택한다. 1번째 행에서 3번 열을 선택하면 {1, 2, 3}중 한가지를 선택해야 하므로 3을 선택한다. 선택한 값을 다음 행에 누적시킨다. 1 2 3 5 10 11 12 11 4 3 2 1 100 1 2 3 2번째 행 입장으로 생각하면 2번째 행에서 0번 열을 선택하면..
-
프로그래머스 Lv2 멀리 뛰기Computer Science/프로그래머스 2023. 10. 6. 10:45
n = 1 {1} n = 2 {2} {1, 1} n = 3 {2, 1} {2, 1} {1, 1, 1} n = 4 {2, 2} {2, 1, 1] {1, 2, 1} {1, 1, 2} {1, 1, 1, 1} 나는 이 문제를 점화식을 세워서 해결했다. DP[n] = DP[n - 1] + DP[n -2]로 풀면 해결된다. 하지만,,, n = 0 일 때 1을 줘야하는 부분이 헷갈렸다. n = 2일 때를 생각하면 쉽게 풀리는 문제였다... #include #include using namespace std; int DP[2001] = {}; long long solution(int n) { long long answer; DP[0] = 1; DP[1] = 1; for(int i = 2; i
-
HUD Aim을 총알 시작점으로 했을 때 문제점 해결Game Programming/언리얼 2023. 10. 5. 16:54
라인 트레이스의 시작 위치를 HUD의 월드좌표로 하면 실제 총과 피격 위치가 맞지 않는 문제가 발생했다. if (FireHit.bBlockingHit) { BeamEndPoint = FireHit.Location; } 그래서, 허드에서부터 출발한 총알의 피격 위치를 구하고 FHitResult WeaponTraceHit; const FVector WeaponTraceStart{ SocketTransform.GetLocation() }; const FVector WeaponTraceEnd{ BeamEndPoint }; GetWorld()->LineTraceSingleByChannel( WeaponTraceHit, WeaponTraceStart, WeaponTraceEnd, ECollisionChannel::..
-
HUD Aim 방향으로 총알 발사Game Programming/언리얼 2023. 10. 5. 16:38
if (GEngine && GEngine->GameViewport) { GEngine->GameViewport->GetViewportSize(ViewportsSize); } FVector2D CrosshairLocation(ViewportsSize.X / 2.f, ViewportsSize.Y / 2.f); CrosshairLocation.Y -= 50.f; FVector CrosshairWorldPosition; FVector CrosshairWorldDirection; bool bScreenToWorld = UGameplayStatics::DeprojectScreenToWorld(UGameplayStatics::GetPlayerController(this, 0), CrosshairLocation, Cr..
-
CrossHair HUD 추가Game Programming/언리얼 2023. 10. 5. 16:18
블루 프린트 클래스의 HUD를 추가한다. HUD를 그리는 이벤트를 받으면 X, Y좌표로 나눠서 Screen Center Vector2D에 저장한다. Screen Center Vector2D에 Y축 오프셋을 더하기 위해 벡터로 만든 후 계산을 해 Crosshair Location Vector2D에 저장한다. Crosshair Location을 가져와 텍스쳐의 픽셀의 크기를 고려 해 X, Y의 위치를 잡아준다. Texture에서 텍스쳐를 선택할 수 있고, Texture UWidth, Height에서 Full UV좌표를 설정 할 수 있다. 전체 블루프린트이다.
-
GunLight 추가Game Programming/언리얼 2023. 10. 5. 16:11
총에 붙은 광원 효과를 얻을려고 했다... UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Light, meta = (AllowPrivateAccess = "true")); class USpotLightComponent* GunLight; 헤더 파일에 SpotLightComponent를 추가하고, GunLight = CreateDefaultSubobject(TEXT("GunLgiht")); GunLight->SetupAttachment(GetMesh()->GetAttachmentRoot()); GunLight->SetRelativeLocation(FVector(40.f, 50.f, 30.f)); GunLight->SetRelativeRotation(F..
-
Socket offsetGame Programming/언리얼 2023. 10. 5. 13:22
마우스 움직임에 따라 Y축 기준 회전이 발생하도록 변경했다. bUseControllerRotationRoll = true; 케릭터 회전에 따라 움직임이 변경되지 않도록 변경했다. GetCharacterMovement()->bOrientRotationToMovement = false; 카메라를 중앙점에서 Y축 +50, Z축 +50 이동 시켰다. CameraBoom->SocketOffset = FVector(0.f, 50.f, 50.f); 전체코드 CameraBoom->SocketOffset = FVector(0.f, 50.f, 50.f); //Create a follow Camera FollowCamera = CreateDefaultSubobject(TEXT("FollowCamera")); FollowCa..
-
프로그래머스 Lv2 숫자 블록(소수)Computer Science/프로그래머스 2023. 10. 5. 11:45
나는 이 문제를 1'000'000'000보다 작거나 현재 블록 보다 작지만 가장 큰 약수를 구하는 문제로 이해했다. 예를들어 18번째 위치에 있는 블록을 생각해보자. "1, 2, 3, 6, 9, 18"의 블록이 18번째에 올 수 있다. 나중 블록이 이전에 깔린 블록을 덮으므로 18번째 블록은 9이다. 여기서 "1"은 약수가 아니므로 가장 큰 약수는 "2"로 나눈 "9이다" (18 / 2 = 9) 결국 처음에 오는 가장 작은 약수로 18번째를 나누면 되는 문제이다. 하지만 조건에 블록이 "1'000'000'000' 을 초과하면 안된다 하므로 가장 큰 약수를 구하는 조건에 추가했다. 또한 소수인 경우에 약수는 1이므로 가장 큰 약수를 찾지 못했을 땐 약수 1을 추가한다. 1번째에는 0의 블록이 들어가므로 b..