#include #include #include #include using namespace std;map m;void cal(string order, string tmp, int idx, int target) { if (tmp.size() == target) { m[tmp]++; return; } for (int i = idx; i solution(vector orders, vector course) { vector answer; for (auto& order : orders) sort(order.begin(), order.end()); for (auto i : course) { m.clear(); ..
#include #include #include #include using namespace std;int dy[] = {0, 0, 1, -1};int dx[] = {1, -1, 0, 0};int solution(vector maps) { int answer = -1; bool flag = false; int y = 0, x = 0; queue>q; vector> v(maps.size(), vector(maps[0].size(), 0)); for(int i = 0; i= maps[0].size() || ny = maps.size()) continue; if(maps[ny][nx] != 'X' && v[ny][nx] == 0) //X 여부 ..
#include #include #include using namespace std;int solution(vector arrayA, vector arrayB) { int answer = 0; int Anum = accumulate(arrayA.begin(), arrayA.end(), 0, gcd); int Bnum = accumulate(arrayB.begin(), arrayB.end(), 0, gcd); answer = max(Anum, Bnum); if(answer == Anum) { for(auto i : arrayB) { if(i % answer == 0) return 0; } } else ..
#include #include using namespace std;string solution(int n) { string answer = ""; char c[3] = {'4', '1', '2'}; while(n > 0) { int r = n % 3; answer = c[r] + answer; n /= 3; if(r == 0) n--; } return answer;} 3진법 계산을 응용한 문제이다. 이번 문제는 기존의 0, 1, 2가 아닌 아래와 같이 4, 1, 2를 나머지로 갖는다.n%3==0 : 4 / n%3==1 : 1 / n%3==2 : 2 따라서 이를 토대로 ans..
#include #include #include #include using namespace std;int solution(vector> book_time) { int answer = 0; vector>v; for (auto i : book_time) { int s = stoi(i[0].substr(0, 2)) * 60 + stoi(i[0].substr(3, 2)); int e = stoi(i[1].substr(0, 2)) * 60 + stoi(i[1].substr(3, 2)) + 10; v.push_back({s, e}); } sort(v.begin(), v.end()); priority_queue, greater> pq;..
#include #include #include using namespace std;long long solution(vector weights) { long long answer = 0; mapm; for(int i=0; i=2) answer += (m[i] * (m[i]-1)) / 2; } return answer;} 문제에 주어진 경우의 수를 보면 (2, 3), (1, 2), (3, 4) 이렇게 3가지 케이스에 대해 검토해야 한다는 것을 알 수 있다.같은 숫자 조합의 경우 조합 공식으로 갯수를 알 수 있기에 1개 이상인 경우를 찾기 위해 map으로 카운팅을 해주었다. 이후에는 현재 수를 기반으로 2로 나눠지면 2:3 비율 값이 Map에 있는 지 체크,3으로 나눠지면..
#include #include #include #include #include using namespace std;vector v[101];bool visited[101];int dfs(int cur) { visited[cur] = 1; int cnt = 1; //카운팅 for (int next : v[cur]) { if (visited[next]) continue; cnt += dfs(next); } return cnt;}int solution(int n, vector> wires) { int answer = INT_MAX; for (auto wire : wires) { v[wire[0]].push_back(w..

게임 플레이 영상 : https://youtu.be/vLpTmFmNDuwGitHub 링크 : https://github.com/bokiee99/Just-Move졸업 작품 보고서 : https://naver.me/GgBtY0Gn게임 공유 링크1. https://naver.me/FUQ3Spde2. https://drive.google.com/file/d/1v9fAzoU5jtBRCj5OTHshReLMiqK5VTlW/view?usp=sharing기획서 PDF1. https://naver.me/517QUSyW2. https://drive.google.com/file/d/1ylI-O-jYrKb5bOucw38CaNuozswiWDWJ/view?usp=drive_link개발 및 구현 PDF 1. https://naver..

Limit Pickup and Equip Sounds총알 6개를 한 번에 픽업할 때 사운드가 증폭되어 상당히 시끄럽게 들린다.이를 Timer를 통해 조절해보도록 하자. 먼저 픽업 및 장착에 대한 사운드와 사운드에 대한 bool 변수, 그리고 픽업 및 장착에 대한 사운드 타이머 리셋 함수 (콜백 함수)와 각 리셋을 위한 시간 변수가 필요하다. 각 bool 값에 대해선 getter() 함수를 생성해주고, 이어서 public 섹션에 타이머를 시작하기 위한 함수들도 작성해주자. reset 함수는 간단하게 각 bool 변수 값을 true로 설정하면 된다.타이머 시작함수들은 각 Sound 값을 false로 만들고, SetTimer() 함수를 호출한다. 그리고 Item() 클래스에서 사운드를 위한 함수를 따로 만들어..

Interp to Multiple Locations이제 실제로 보간해주는 작업을 구현해주자.먼저 보간할 각 위치에 대한 Index를 얻는 함수를 구현해주자. 인덱스의 경우 ItemCount을 통해 계산하게 된다.총알이 여러개 있을 경우 기본적으로 ItemCount가 0인 첫 번째 총알을 반환할 것이다.다음으로 ItemCount가 증가했으므로 다시 해당 Count보다 작은 값을 찾게 된다.처음에 초기화 했을 때 전부 ItemCount을 0으로 했기 때문에 바로 다음 인덱스를 가르키게 된다.이를 반복하며 ItemCount가 1씩 증가하며 다음 ItemCount가 0인 인덱스를 순차적으로 반환하게 된다. InterpLoc에 대한 Index 변수도 선언 및 초기화 해주자. 그리고 해당 Index에 방금 만들어준..

Setup Interp Locations저번 강의에서 설정한 위치에 대한 작업을 해주자.먼저 픽업한 아이템이 무엇인지 알기 위해 무기와 총알에 대한 열거형을 선언해주었다. 이어서 해당 변수와 초기화도 해주었다. 이어서 구조체와 구조체를 기반으로 한 TArray도 선언해주었다. InterpLocation을 얻기 위한 함수도 public으로 선언해주었다.InterpLocations의 갯수를 체크하고 범위 내면 입력받은 인덱스의 InterpLocation을 반환하거나,없다면 기본 값을 반환하게 된다. 이제 기본 초기화 함수도 작성해주자.기존 구조체에 Add 함수를 통해 UScenecomponent와 ItemCount 값을 넘겨주면 된다.무기와 총알 종류 6개에 대해 각각 초기화를 진행하자. 초기화 함수의 경우..

Interpolation Scene Components탄약의 경우 무기와 동일한 위치로 보간되는 것이 다소 어색해보인다.탄약과 무기의 보간 위치를 다르게 설정해줄 것이며,또 여러개의 탄약이 있는 경우에 대해서도 다른 위치에 보간되도록 해보자. 먼저 이를 USceneComponent로 다루게 되며, 무기 1개 탄약 6개에 대한 변수를 선언해줄 것이다. 이제 해당 컴포넌트에 각각 Static Mesh를 생성하여 각각에 맞는 Mesh를 할당해줄 것이다.여기서 총기 Mesh는 호환이 불가능한 에셋이여서 일단 임시용으로 강의와 다른 Mesh(드릴)을 할당해주었다.나머지 총알은 기존에 있던 Shells_45_Ammo를 사용할 것이며, 전보다 작은 smaller 버전을 선택할 것이다.그리고 각각 위치를 따로 잡아주자..

Pickup Ammo on OverlapE 키를 눌러서 총알을 줍는 것 뿐만 아니라 총알을 지나칠 때도 바로 총알을 줍게 만들어보자.Sphere를 이용한 오버렙 이벤트를 통해 구현할 것이기 때문에 필요한 변수부터 선언해주자. Item 클래스에서도 사용한 적 있는 OverLap 함수를 이름만 바꿔서 또 사용할 것이다. 그리고 게임 시작시 바인딩을 해줄 것이다. 이제 오버랩된 캐릭터가 유효하면 StartItemCurve() 함수를 호출한다.이후 탄약은 사라지므로 충돌 판정도 없애준다. 이러면 PickupSound가 SelectButtonPressed() 함수에 있기에 해당 사운드가 들리지 않는다.따라서 PickupSound 호출해주는 부분을 StartItemCurve() 함수로 위치를 조정해주자.

Bind Ammo CountAmmo Count에 대해 하드코딩한 것을 수정해보자.무기에 대한 위젯을 만들 때 바인딩했던 작업을 똑같이 해줄 것이다. 이번엔 Item Reference가 아닌 Ammo Reference 변수가 필요하다. 이를 Bp_AmmoPickup 클래스 graph 창에서 생성해주자. 그리고 Ammo BP 클래스로 가서 Ammo Reference 변수에 대한 값을 세팅해주자. 이제 이를 토대로 바인딩을 해줄 것이다. 전에 설정했던 20개가 그대로 반영된 것을 볼 수 있다.