TIL

TIL day 29

gbleem 2025. 1. 27. 20:59

1. 코딩테스트


오늘 오전에는 프로그래머스 level2 의 배달 문제를 풀었습니다.

https://school.programmers.co.kr/learn/courses/30/lessons/12978

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

  • 뭘로 풀지?
    • graph구조로 이루어져있으며, 탐색을 하는 문제였습니다. 탐색에는 bfs를 사용했습니다.
      1. 먼저 adj라는 벡터를 통해서 모든 노드의 연결 상태를 담아주었습니다.
      2. 이후 value라는 2차원 배열에는 각 노드에 해당하는 가중치를 담아주었습니다.
        • 이때 주의할 점은 같은 시작점, 도착점 이지만 다른 가중치를 가진 도로가 존재하기 때문에, 중복된 도로가 발견되면 더 작은 값으로 바꿔주는 작업이 필요합니다.
      3. 이후 bfs로 탐색을 진행하면서 dist 라는 배열에 거리 값을 업데이트 해준 후
        • bfs 탐색에서 주의할 점은
          • 기존 bfs 탐색에서는 방문한 곳은 continue 해버리는데 
          • 이 탐색에서 중복된 탐색이 있는 경우, 기존의 값보다 현재 값이 더 작으면 작은 값으로 업데이트 해주는 작업을 해주어야 한다는 점입니다.
          • if(dist[nxt] > dist[cur] + value[cur][nxt]) 이 코드를 통해서 중복된 값 발견 시 업데이트 해주었습니다.
      4. dist 배열에서 K보다 작은 값들을 찾아서 answer를 찾으면 됩니다.
#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. 언리얼 과제 및 공부


과제를 진행하면서 새롭게 배운 부분을 정리하였습니다.

  • 먼저 언리얼 애니메이션 관련 글 정리를 마무리 하였습니다.

https://gbleem.tistory.com/52

 

Unreal Engine - 캐릭터 만들기

플랫포머 게임을 테스트 하기 위해서 간단한 캐릭터를 하나 만들어 보면서, 관련 내용을 정리해 볼 예정이다.1. character 클래스 생성 및 기초 세팅우리는 걸어다니는 보행형 캐릭터를 만들기가

gbleem.tistory.com

 

  • 애니메이션 관련 정리를 하면서 apply additive 노드를 사용하다가 문제가 있었는데, 해당 문제를 해결하고 공부한 내용을 정리하였습니다.

https://gbleem.tistory.com/54

 

UE5 Issues : Additive Animation (animation sequence 색깔)

1. Additive Animation참고자료들자세한 설명달리면서 멈춰있는 애니메이션을 동작시킬 때 자연스럽게 하기  2. IssuesApply Additive 노드를 통해서 아래와 같이 애니메이션을 적용하려고 하였다.그런데,

gbleem.tistory.com

 

  • 마지막으로 6번째 과제 진행 중에 충돌 시 특정 처리를 하는 로직을 구성하고 싶어서, 관련 내용을 찾아서 공부한 후 내용을 정리해 보았습니다.

https://gbleem.tistory.com/55

 

UE5 Issues : C++ 충돌 처리

게임을 만들면서, 충돌 처리는 많이 사용하게 되는 로직 중 하나이다.발판을 밟으면 일정 시간 이후 떨어지는 로직을 구현하면서 공부한 내용을 정리해 보았다. 1. NotifyActorBeginOverlap언리얼 레퍼

gbleem.tistory.com

과제 7번 리포지토리를 만들고, 가장 기본적인 세팅까지 마쳤습니다.

  •  이슈
    • .gitignore를 지금까지 잘못된 파일 경로에 두었던 것을 이제서야 알게 되었습니다;;
      • 그러다보니 자꾸 언어 비율이 이상하게 떠서, gitignore를 만들어서 썼습니다.
      • 깃허브에서 제공해주는 unreal engine .gitignore를 사용할 때에는 우리가 이름을 지은 폴더 안쪽에 넣어주어야 합니다. (source, contents 등의 폴더가 있는 곳)
      • 지금까지 조금 이상한 방식으로 클론을 하다보니 이런 문제가 있었습니다... 머쓱

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