bitmasking을 이용한 문제
Q. 길이가 n(1 ≤ n ≤ 15)인 배열(또는 벡터)이 있는데 이 배열로부터 만들어질 수 있는 모든 부분집합의 합을 전부 구하여, 부분집합의 합 중에서 유일한 값들의 개수를 출력하는 프로그램을 짜보시오.
void solution()
{
vector<int> nums = { 1, 2, 3 };
set<int> sumSet;
for (int i = 0; i < (1 << nums.size()); i++)
{
cout << "[ ";
int sum = 0;
for (int j = 0; j < nums.size(); j++)
{
if (i & (1 << j))
{
cout << nums[j] << " ";
sum += nums[j];
}
}
cout << "], 합 : " << sum << endl;
sumSet.insert(sum);
}
cout << endl;
cout << "중복을 제거한 총 합 개수 : " << sumSet.size() << endl;
}
비트 연산자를 이용한 방식이 잘 이해가 안됬는데, 이번에 어떻게 사용하는지 감을 좀 잡은 것 같다.
지갑크기 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/86491
int solution(vector<pair<int, int>> businessCardVec)
{
int xMax = 0, yMax = 0;
for (auto& ele : businessCardVec)
{
int eleMax = max(ele.first, ele.second);
int eleMin = min(ele.first, ele.second);
int* purseMax = xMax > yMax ? &xMax : &yMax;
int* purseMin = purseMax == &xMax ? &yMax : &xMax;
if (*purseMax < eleMax)
*purseMax = eleMax;
if (*purseMin < eleMin)
*purseMin = eleMin;
}
cout << "xMax : " << xMax << " yMax : " << yMax << endl;
return xMax * yMax;
}
걍 조금 더 쉽게 회전 시켰으면 됬을거같다.
수포자 모의고사
https://school.programmers.co.kr/learn/courses/30/lessons/42840
vector<int> solution(vector<int> answers)
{
//수포자 번호, 카운트
map<int, int> answerMap;
//수포자 패턴들
vector<vector<int>> patterns =
{
{1, 2, 3, 4, 5},
{2, 1, 2, 3, 2, 4, 2, 5},
{3, 3, 1, 1, 2, 2, 4, 4, 5, 5 }
};
for (int i = 0; i < answers.size(); i++)
{
//수포자들의 패턴
for (int j = 0; j < 3; j++)
if (answers[i] == patterns[j][i % patterns[j].size()])
answerMap[j]++;
}
int maxValue = 0;
for (auto& ele : answerMap)
maxValue = max(maxValue, ele.second);
vector<int> result;
for (auto& ele : answerMap)
if (ele.second == maxValue)
result.push_back(ele.first + 1);
return result;
}
차피 숫자번 째 학생의 번호의 점수를 저자아는거라 map이 아니라 vector로 쓰는게 훨씬 나았을 것 같다.
서버 → 클라이언트 로 이벤트 호출UPROPERTY(ReplicatedUsing=OnRep_HealthChanged)
int32 PlayerHealth = 100;
UFUNCTION()
void OnRep_HealthChanged();
서버 → 클라이언트로 실행UPROPERTY(Replicated)
int32 PlayerHealth = 100;
서버->단일 클라이언트 로 함수를 실행시키고 싶으면 Clinet를 UPROPERTY 안에 넣으면 된다.클라이언트->서버 로 함수를 실행시키고 싶으면 Server를 UPROPERTY 안에 넣으면 된다.서버->모든 클라이언트 로 함수를 실행시키고 싶으면 NetMulticast를 UPROPERTY 안에 넣으면 된다.UFUNCTION(Server, Reliable)
void ServerFireWeapon();
UFUNCTION(NetMulticast, Unreliable)
void MulticastPlayExplosionEffect();
RPC는 기본적으로 비신뢰성 통신이다.
RPC 호출이 원격 머신에서 확실히 실행되도록 하기 위해서는 Reliable 키워드를 붙이면 된다.
RPC 의 정상 작동을 위해 충족시켜야 하는 요건이 몇 가지 있다.
- Multicast RPC 는 예외다.
- 서버에서 호출되는 경우, 서버에서는 로컬에서 실행될 뿐만 아니라 현재 연결된 모든 클라이언트에서도 실행된다.
- 클라이언트에서 호출되는 경우, 로컬에서만 실행되며, 서버에서는 실행되지 않는다.
- 현재 멀티캐스트 이벤트에 대해 단순한 throw틀 조절하는 메커니즘이 있다.
멀티캐스트 함수는 주어진 액터의 네트워크 업데이트 기간동안 두 번 이상 리플리케이트되지 않는다.