1. 코딩테스트
오늘 오전에는 오랜만에 코딩테스트 문제를 풀었습니다...(매일 풀어야 할텐데)
프로그래머스 레벨 2 메뉴 리뉴얼 문제를 풀었습니다.
https://school.programmers.co.kr/learn/courses/30/lessons/72411
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
- 뭘로 풀지?
- orders 라는 배열의 크기가 20 이하이기 때문에, 모든 경우의 수를 백트래킹으로 뽑은 후, map을 이용해서 수를 세면 될 것 같다는 생각이 들었습니다.
- 백트래킹
- 모든 경우의 수를 체크하는 방식 중 하나입니다.
- 재귀함수를 통해 쉽게 모든 경우의 수를 구할 수 있습니다.
- 이 문제에서는 특정 string(str)에서 특정 갯수(size) 만큼 선택한 후 처리를 해주면 됩니다.
- map
- Choose를 통해 조건 (res.size() == size) 을 만족하는 경우 map에 해당 string을 넣어준 후 개수를 측정해 주었습니다.
- 이후 모든 경우의 수를 다 체크하면, map을 돌면서 최대 count 수를 찾고(maxCnt)
- 다시 map을 돌면서 maxCnt와 같은 value값을 가지는 key를 answer에 push_back 해주면 됩니다.
- 주의할 점
- 백트래킹을 통해 조합을 구하기 때문에, orders 각각의 string이 정렬된 상태여야 하고,
- map은 course마다 초기화 해주어야 한다는 것입니다.
- 마지막으로 answer도 정렬을 해서, 문제에서 원하는 답을 찾아주면 됩니다.
#include <string>
#include <vector>
#include <algorithm>
#include <map>
#include <iostream>
using namespace std;
bool isUsed[30];
vector<int> ans;
map<string, int> m;
void Choose(int size, string str, string res)
{
if(res.size() == size)
{
m[res]++;
//for(auto r : res)
// cout << r;
//cout<<"\n";
}
for(int i = 0; i < str.size(); ++i)
{
Choose(size, str.substr(i + 1), res + str[i]);
}
}
vector<string> solution(vector<string> orders, vector<int> course)
{
vector<string> answer;
for(auto& o : orders)
sort(o.begin(), o.end());
for(int i = 0; i < course.size(); ++i)
{
for(int j = 0; j < orders.size(); ++j)
Choose(course[i], orders[j], "");
int maxCnt = -1;
for(const auto& mi : m)
maxCnt = max(maxCnt, mi.second);
for(const auto& mi : m)
{
if(maxCnt >= 2 && maxCnt == mi.second) //최대인 경우
{
answer.push_back(mi.first);
}
}
m.clear();
}
sort(answer.begin(), answer.end());
return answer;
}
2. 언리얼
- 캐릭터 공격 로직 추가
- 좌클릭시 공격
- 연사 및 단발 구현
- 연사 속도 구현
- r 누르면 장전
- 좌클릭시 공격
- 캐릭터 아이템 획득 로직 구현 중
- overlap된 순간 trace를 통한 아이템 peeking 시스템 구현 예정
'TIL' 카테고리의 다른 글
TIL day 46 (0) | 2025.02.24 |
---|---|
TIL day 44 (0) | 2025.02.20 |
TIL day 42 (0) | 2025.02.18 |
TIL day 41 (0) | 2025.02.17 |
TIL day 40 (0) | 2025.02.14 |