프로세스
피로도
// dfs 활용
int answer = 0;
void dfs(int count, int k, vector<bool> visited, vector<vector<int>>& dungeons){
if(answer < count){
answer = count;
}
for(int i = 0; i < dungeons.size(); i++){
if(visited[i] || dungeons[i][0] > k) continue;
visited[i] = true;
dfs(count + 1, k - dungeons[i][1], visited, dungeons);
visited[i] = false;
}
}
// algorithm 헤더의 next_permutation() 활용 - 다음 순열을 반환해줌
sort(dungeons.begin(), dungeons.end());
do {
int temp = k;
int count = 0;
for(vector<int> dungeon : dungeons){
if(temp >= dungeon[0]){
temp -= dungeon[1];
count++;
}
}
answer = max(answer, count);
} while(next_permutation(dungeons.begin(), dungeons.end()));
타겟 넘버
k진수에서 소수 개수 구하기
주차 요금 계산
std::map 활용AGameModeBase::bUseSeamlessTravel을 true로 설정
CopyProperties() 함수를 통해 복사할 변수를 지정해서 필요한 변수의 경우 데이터를 복사할 수 있다.PlayerController와 PlayerState가 재생성되서 레벨 전환 시에 플레이어마다 승자/패자 여부를 확인할 수가 없었음GameInstance에 APlayerState::PlayerId와 함께 승패 여부를 저장해서 시퀀스 레벨에서 활용하고자 했고, 레벨 전환이 일어나도 PlayerState의 데이터가 유지되길 원해서 Seamless Travel을 사용하고자 함AGameMode::BeginPlay()에서 기존의 PlayerController를 통해 시퀀스를 재생PlayerController가 유지되지 않음AGameMode::BeginPlay() 부분이 아니라 몇 초 후에 재생 시에는 정상적으로 동작됨PlayerController의 객체 인스턴스는 이전 레벨과 동일하나 새로운 월드에 등록하는 과정에서 기존의 시퀀스 재생 로직이 무시가 됨PlayerController 인스턴스는 유지가 되나, 월드에 등록되는 시점이 AGameMode::BeginPlay()보다 느림AGameMode::BeginPlay()에서 딜레이를 주어 현재는 3초 후에 시퀀스 재생이 되도록 했음GameInstance를 통해 화면에 BlackScreen UI를 띄워 로딩 중으로 보이게 처리함AGameMode::PostSeamlessTravel() 함수가 서버에서 Seamless Travel이 완전히 끝났음을 보장해주기 때문에 해당 함수에서 시퀀스를 재생해주는 것이 가장 안정적인 방법으로 보임EditAnywhere, VisibleAnywhere 등의 지정자를 사용하여 변수를 언리얼 에디터의 디테일 패널에 노출시켜, 에디터에서 값을 수정할 수 있게 함BlueprintReadWrite, BlueprintReadOnly 등의 지정자를 통해 블루프린트에서 접근 가능 Replicated, ReplicatedUsing 등의 지정자를 통해 멀티플레이 환경에서 해당 변수의 값을 서버에서 클라이언트로 자동 복제하도록 설정BlueprintCallable 지정자를 사용하여 함수를 블루프린트 그래프에서 노드로 호출할 수 있게 함BlueprintImplementableEvent나 BlueprintNativeEvent를 사용하여 C++에서 선언하고 블루프린트에서 로직을 구현할 수 있음Server, Client, NetMulticast 등의 지정자를 사용하여 함수를 네트워크 간에 호출할 수 있음AddDynamic에 바인딩되거나, 타이머 핸들에 콜백 함수로 등록될 수 있게 함