코딩테스트
[level 1] 체육복 - 42862
https://school.programmers.co.kr/learn/courses/30/lessons/42862#
[level 1] 체육복 - 42862 풀이코드
더보기
#include <string>
#include <vector>
using namespace std;
vector<int> cnt;
int solution(int n, vector<int> lost, vector<int> reserve) {
int answer = 0;
for (int i = 0; i < n; i++) {
cnt.push_back(1);
}
for (int i : reserve) {
cnt[i - 1] = 2;
}
for (int i : lost) {
cnt[i - 1]--;
}
for (int i = 0; i < n; i++) {
if(cnt[i] == 2) {
if (i > 0 && cnt[i - 1] == 0) {
cnt[i]--;
cnt[i - 1]++;
} else if (cnt[i + 1] == 0) {
cnt[i]--;
cnt[i + 1]++;
}
}
}
for (int i : cnt) if(i > 0) answer++;
return answer;
}
[Silver IV] 주몽 - 1940
https://www.acmicpc.net/problem/1940
[Silver IV] 주몽 - 1940 풀이코드
더보기
// 조합을 이용해서 만든 코드 (본인)
#include <bits/stdc++.h>
using namespace std;
int n, a, k = 2, r = 0;
unsigned long long m;
vector<int> vc;
void combi(int start, vector<int> &b) {
if (b.size() == k) {
if(vc[b[0]] + vc[b[1]] == m) r++;
return;
}
for (int i = start + 1; i < n; i++) {
b.push_back(i);
combi(i, b);
b.pop_back();
}
}
int main() {
ios::sync_with_stdio(false); cin.tie(NULL);
cin >> n;
cin >> m;
for (int i = 0; i < n; i++) {
cin >> a;
vc.push_back(a);
}
vector<int> B;
combi(-1, B);
cout << r;
return 0;
}
// 조합이지만 2개만 찾는거라 중첩 for문을 사용한 코드 (강사님)
#include <bits/stdc++.h>
using namespace std;
int n, m, a[15001], cnt;
int main() {
ios::sync_with_stdio(false); cin.tie(NULL);
cin >> n >> m;
for(int i = 0; i < n; i++) cin >> a[i];
for(int i = 0; i < n; i++) {
for(int j = i + 1; j < n; j++) {
if (a[i] + a[j] == m) cnt++;
}
}
cout << cnt;
return 0;
}
언리얼 게임플레이 타이머
특정 시간마다 메서드가 호출되도록 할 수 있는 타이머
Tick()은 매프레임 호출되는 것이어서 성능적인 부분에서 많이 개선된다.
아래 예시 코드는 일정 시간마다 ActorHidden의 값을 변경해 주는 코드이다.
https://dev.epicgames.com/documentation/ko-kr/unreal-engine/gameplay-timers-in-unreal-engine
//BlinkCube.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "BlinkCube.generated.h"
UCLASS()
class EXAM06_API ABlinkCube : public AActor
{
GENERATED_BODY()
public:
ABlinkCube();
void ChangeActive();
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BlinkCube")
USceneComponent* SceneRoot;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BlinkCube")
UStaticMeshComponent* StaticMeshComp;
protected:
virtual void BeginPlay() override;
private:
// Timer을 이용하기 위해 FTimerHandle 선언
FTimerHandle TimerHandle;
UPROPERTY(EditAnywhere, Category = "BlinkCube")
float BlinkSpeed;
bool isActive;
};
// BlinkCube.cpp
#include "BlinkCube.h"
ABlinkCube::ABlinkCube()
{
PrimaryActorTick.bCanEverTick = true;
SceneRoot = CreateDefaultSubobject<USceneComponent>(TEXT("SceneRoot"));
StaticMeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMesh"));
StaticMeshComp->SetupAttachment(SceneRoot);
}
void ABlinkCube::ChangeActive()
{
isActive = !isActive;
SetActorHiddenInGame(isActive);
}
void ABlinkCube::BeginPlay()
{
Super::BeginPlay();
isActive = true;
// BlinkSpeed 시간마다 ChangeActive() 메서드 호출
// 매 프레임으로 지나가는 Tick()에 비하면 훨신 효율적인 코드
GetWorldTimerManager().SetTimer(TimerHandle, this, &ABlinkCube::ChangeActive, BlinkSpeed, true);
}