TIL day 29
1. 코딩테스트
오늘 오전에는 프로그래머스 level2 의 배달 문제를 풀었습니다.
https://school.programmers.co.kr/learn/courses/30/lessons/12978
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
- 뭘로 풀지?
- graph구조로 이루어져있으며, 탐색을 하는 문제였습니다. 탐색에는 bfs를 사용했습니다.
- 먼저 adj라는 벡터를 통해서 모든 노드의 연결 상태를 담아주었습니다.
- 이후 value라는 2차원 배열에는 각 노드에 해당하는 가중치를 담아주었습니다.
- 이때 주의할 점은 같은 시작점, 도착점 이지만 다른 가중치를 가진 도로가 존재하기 때문에, 중복된 도로가 발견되면 더 작은 값으로 바꿔주는 작업이 필요합니다.
- 이후 bfs로 탐색을 진행하면서 dist 라는 배열에 거리 값을 업데이트 해준 후
- bfs 탐색에서 주의할 점은
- 기존 bfs 탐색에서는 방문한 곳은 continue 해버리는데
- 이 탐색에서 중복된 탐색이 있는 경우, 기존의 값보다 현재 값이 더 작으면 작은 값으로 업데이트 해주는 작업을 해주어야 한다는 점입니다.
- if(dist[nxt] > dist[cur] + value[cur][nxt]) 이 코드를 통해서 중복된 값 발견 시 업데이트 해주었습니다.
- bfs 탐색에서 주의할 점은
- dist 배열에서 K보다 작은 값들을 찾아서 answer를 찾으면 됩니다.
- graph구조로 이루어져있으며, 탐색을 하는 문제였습니다. 탐색에는 bfs를 사용했습니다.
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int dist[55];
int value[55][55];
vector<int> adj[55];
void bfs()
{
fill(dist, dist + 55, -1);
queue<int> q;
q.push(1);
dist[1] = 0;
while(!q.empty())
{
int cur = q.front();
q.pop();
for(auto nxt : adj[cur])
{
if(dist[nxt] == -1)
{
q.push(nxt);
dist[nxt] = dist[cur] + value[cur][nxt];
}
if(dist[nxt] > dist[cur] + value[cur][nxt])
{
q.push(nxt);
dist[nxt] = dist[cur] + value[cur][nxt];
}
}
}
}
int solution(int N, vector<vector<int> > road, int K)
{
int answer = 0;
for(int i = 0; i < road.size(); ++i)
{
adj[road[i][0]].push_back(road[i][1]);
if(value[road[i][0]][road[i][1]] != 0)
value[road[i][0]][road[i][1]] = min(value[road[i][0]][road[i][1]], road[i][2]);
else
value[road[i][0]][road[i][1]] = road[i][2];
adj[road[i][1]].push_back(road[i][0]);
if(value[road[i][1]][road[i][0]] != 0)
value[road[i][1]][road[i][0]] = min(value[road[i][1]][road[i][0]], road[i][2]);
else
value[road[i][1]][road[i][0]] = road[i][2];
}
bfs();
for(int i = 1; i <= N; ++i)
{
if(dist[i] <= K)
{
answer++;
}
}
return answer;
}
2. 언리얼 과제 및 공부
과제를 진행하면서 새롭게 배운 부분을 정리하였습니다.
- 먼저 언리얼 애니메이션 관련 글 정리를 마무리 하였습니다.
Unreal Engine - 캐릭터 만들기
플랫포머 게임을 테스트 하기 위해서 간단한 캐릭터를 하나 만들어 보면서, 관련 내용을 정리해 볼 예정이다.1. character 클래스 생성 및 기초 세팅우리는 걸어다니는 보행형 캐릭터를 만들기가
gbleem.tistory.com
- 애니메이션 관련 정리를 하면서 apply additive 노드를 사용하다가 문제가 있었는데, 해당 문제를 해결하고 공부한 내용을 정리하였습니다.
UE5 Issues : Additive Animation (animation sequence 색깔)
1. Additive Animation참고자료들자세한 설명달리면서 멈춰있는 애니메이션을 동작시킬 때 자연스럽게 하기 2. IssuesApply Additive 노드를 통해서 아래와 같이 애니메이션을 적용하려고 하였다.그런데,
gbleem.tistory.com
- 마지막으로 6번째 과제 진행 중에 충돌 시 특정 처리를 하는 로직을 구성하고 싶어서, 관련 내용을 찾아서 공부한 후 내용을 정리해 보았습니다.
UE5 Issues : C++ 충돌 처리
게임을 만들면서, 충돌 처리는 많이 사용하게 되는 로직 중 하나이다.발판을 밟으면 일정 시간 이후 떨어지는 로직을 구현하면서 공부한 내용을 정리해 보았다. 1. NotifyActorBeginOverlap언리얼 레퍼
gbleem.tistory.com
과제 7번 리포지토리를 만들고, 가장 기본적인 세팅까지 마쳤습니다.
- 이슈
- .gitignore를 지금까지 잘못된 파일 경로에 두었던 것을 이제서야 알게 되었습니다;;
- 그러다보니 자꾸 언어 비율이 이상하게 떠서, gitignore를 만들어서 썼습니다.
- 깃허브에서 제공해주는 unreal engine .gitignore를 사용할 때에는 우리가 이름을 지은 폴더 안쪽에 넣어주어야 합니다. (source, contents 등의 폴더가 있는 곳)
- 지금까지 조금 이상한 방식으로 클론을 하다보니 이런 문제가 있었습니다... 머쓱
- .gitignore를 지금까지 잘못된 파일 경로에 두었던 것을 이제서야 알게 되었습니다;;
https://github.com/GBL22M/SCC_CH3-7
GitHub - GBL22M/SCC_CH3-7
Contribute to GBL22M/SCC_CH3-7 development by creating an account on GitHub.
github.com