1. 비효율적인 find 사용 find 함수는 O(n) 시간 win_nums를 set으로 변환하여 O(1)로 개선 가능 ※unordered_set은 중복 허용X 컨테이너로 해시 테이블로 빠른 검색 가능
2. lottoRank 함수 단순화 siwtch-case 대신 배열로 대체하여 단순화
3. 코드 정리 및 가독성 한 번의 루프에서 rightCount와 zeroCount 동시 계산
#include <string>
#include <vector>
#include <unordered_set>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> lottos, vector<int> win_nums) {
unordered_set<int> winSet(win_nums.begin(), win_nums.end());
int rightCount = 0;
int zeroCount = 0;
```
for (int lotto : lottos) {
if (lotto == 0) {
++zeroCount; // 0의 개수 카운트
} else if (winSet.find(lotto) != winSet.end()) {
++rightCount; // 맞춘 번호 카운트
}
}
// 순위를 나타내는 배열
vector<int> rank = {6, 6, 5, 4, 3, 2, 1};
return {rank[rightCount + zeroCount], rank[rightCount]};
```
}
2️⃣ 폰으로 플레이어 만들기
💥문제 1 : 폰 씬 컴포넌트
▪️상황 폰으로 플레이어를 만들어야 하는 상황 →강의에선 폰의 자식인 캐릭터 생성은 씬 컴포넌트를 만들어주지 않음 →그럼 폰은 씬 컴포넌트를 만들어줘야 하나?
▪️시도 블루프린트를 확인해봄
▪️해결 폰은 액터와 동일한 구조를 띠고 있어 캡슐 컴포넌트를 생성한 뒤 루트로 설정해야 함
💥문제 2 : 사라진 컴포넌트
▪️상황 컴포넌트를 분명 생성했는데 블루프린트 만드니까 없어졌다. 뭐지 왜 안 보이지 내가 만든 컴포넌트들 다 어디갔지..?
▪️시도 UPORPERTY를 안 해서 그런건가
▪️해결 으악 생성자에 안 쓰고 다른 함수에 컴포넌트 생성 코드를 쓰니 없지
💥문제 3 : 콜리전 크기 조절
▪️상황 생성한 콜리전이 너무 작다..!
▪️시도 콜리전의 스케일을 조정한다. →스켈레탈 메시도 같이 커짐
▪️해결 셰이프 사용해서 크기 조정
💭회고 확실히 강의를 보면서 만드는 것과 내가 직접 만들어보는 것의 차이는 큰 것 같다. 함수에 어떤 매개변수를 넘겨야하는지나 어떤 상황에서 어떤 함수를 써야하는지를 고민하면서 머리에 더 잘 들어오는 느낌이다.
현재 과제로 부여된 단순 평면 이동 구현까지는 완료했는데 단순한 월드 X, Y 이동이 아닌 바라보는 쪽으로 이동하는 걸 하고 싶어서 현재 진행 중이다. 바라보는 방향으로 이동하는 건(W, S) 어찌저찌 구현을 했는데 왼쪽 오른쪽(A, D) 이동하는 거에서 막혔다. GetControlRotation()*FVector(1, 1, 0)을 통해 바라보는 쪽의 벡터는 구했는데...수직은 어떻게 구해야하지..? 좀 더 고민해봐야겠다.