TIL day 14

2025. 1. 6. 21:48·TIL

블로그 글을 정리할 때 공부한 내용은 찾아보기 쉽도록 따로 분류해서 글을 작성하고

TIL에서는 오늘 어떤 것에 대해 공부를 하였는지 전체적으로 적는 것이 좋을 것 같아서 새로운 카테고리를 만들었습니다.

 

1.  C++ 디자인 패턴

  • 디자인 패턴 강의를 듣고, 추가적인 공부를 진행하였습니다.
  • 디자인 패턴이라는 것이 언제 어디서 사용해야 할 지 감이 잘 잡히지 않아서, 좀 더 예시들이나 다른 좋은 코드들을 보면서 앞으로 공부를 더 해야할 것 같다는 생각이 들었습니다.

https://gbleem.tistory.com/24

 

C++ 디자인 패턴

수업시간에 배운 디자인 패턴에 대해 공부하고, 추가적인 내용도 정리해 보았다.참고한 자료는 아래와 같다.https://refactoring.guru/design-patterns/cpp Design Patterns in C++Turns a request into a stand-alone object th

gbleem.tistory.com

2. Unreal Engine 간단한 로그를 통한 C++ 연습

  • UE_LOG를 사용해서 간단한 예제 코드들을 돌려보고, 새로 배운 내용들 몇 가지 정리해 보았습니다.
  • 새로 배운 것
    • FString::FromInt 함수: int 값을 FString으로 바꿔주는 함수
    • AddOnScreenDebugMessage 함수: 출력로그(콘솔)이 아니라 화면에 값을 출력해주는 함수

https://gbleem.tistory.com/25

 

Unreal Engine 간단한 로그 찍기

1. UE 로그 시스템아래의 코드와 같은 format 을 가지고 있으며, 각 파라메터는 다음과 같다.첫번째 파라메터는 카테고리두번째 파라메터는 로그 상세 레벨세번째 파라메터는 형식 문자열네번째

gbleem.tistory.com

3. 코딩 테스트

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

 

프로그래머스

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

programmers.co.kr

  • 오늘은 level2의 미로탈출 문제를 풀었습니다.
  • 이 문제는 BFS로 풀 수 있는 문제입니다.
    • 기본적인 BFS 테크닉에 distance 계산을 하는 방식을 추가해서 풀면 되는 문제입니다.
      • https://www.acmicpc.net/problem/2178 이 문제에서 쓰는 테크닉과 같은 테크닉을 쓰지만, 이 문제에서는 BFS를 두 번 사용해야 한다는 점이 차이점입니다.
      • 우리가 기본적으로 BFS를 사용할 때 visited라는 배열을 통해 이미 해당 좌표를 방문했는지를 체크하게 됩니다.
      • 그러나 생각을 바꿔보면, 해당 좌표를 방문할 때 거리를 업데이트 해준다면, 시작점으로부터 도착점으로 까지의 거리를 쉽게 구할 수 있습니다.
  • 정답 코드와 추가적인 설명
    • vis 배열을 int타입으로 선언 후, 각각의 BFS를 시작할 때 모두 -1로 값을 초기화합니다.
    • 시작점을 큐에 넣음과 함께 vis[시작점X][시작점Y] = 0; 으로 초기화 후 BFS 진행합니다.
    • 이때 예외처리에 걸리지 않고(좌표를 벗어나거나, 이미 방문한 곳을 오거나, 'X' 인 곳을 오거나) 정상적인 좌표라면,
    • 큐에 해당 좌표를 넣어주면서, vis배열의 값을 이전 좌표의 값 + 1 을 대입해주면 됩니다. (vis[nx][ny] = vis[cur.first][cur.second] + 1;)
#include <string>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;

int answer = 0;
char board[102][102]; //row col
int vis[102][102];
int dx[4] = { 1, 0, -1, 0 };
int dy[4] = { 0, 1, 0, -1 };
int row = 0;
int col = 0;

int bfs(pair<int, int> st, pair<int, int> en)
{
    for (int i = 0; i < row; ++i)
        fill(vis[i], vis[i] + col, -1);

    queue<pair<int, int>> q;
    q.push({ st.first, st.second });
    vis[st.first][st.second] = 0;

    while (!q.empty())
    {
        auto cur = q.front();
        q.pop();

        for (int dir = 0; dir < 4; ++dir)
        {
            int nx = cur.first + dx[dir];
            int ny = cur.second + dy[dir];

            if (nx < 0 || nx >= row || ny < 0 || ny >= col)
                continue;
            if (board[nx][ny] == 'X' || vis[nx][ny] != -1) //벽이거나, 이미 방문한 경우
                continue;
            if (nx == en.first && ny == en.second)
            {
                vis[nx][ny] = vis[cur.first][cur.second] + 1;
                return vis[nx][ny];
            }

            q.push({ nx, ny });
            vis[nx][ny] = vis[cur.first][cur.second] + 1;
        }
    }
    return -1;
}

int solution(vector<string> maps)
{
    int answer = 0;
    pair<int, int> s;
    pair<int, int> e;
    pair<int, int> l;

    row = maps.size();
    col = maps[0].size();

    for (int i = 0; i < maps.size(); ++i)
    {
        for (int j = 0; j < maps[i].size(); ++j)
        {
            if (maps[i][j] == 'S')
                s = { i,j };
            else if (maps[i][j] == 'E')
                e = { i,j };
            else if (maps[i][j] == 'L')
                l = { i, j };
            else if (maps[i][j] == 'O')
                board[i][j] = 'O';
            else if (maps[i][j] == 'X')
                board[i][j] = 'X';
        }
    }

    if (bfs(s, l) == -1)
        return -1;
    answer += bfs(s, l);        
    if (bfs(l, e) == -1)
        return -1;
    answer += bfs(l, e);

    return answer;
}
  • 아래 사진이 각각의 BFS가 끝난 후 vis 배열의 모습입니다.

 

'TIL' 카테고리의 다른 글

TIL day 19  (1) 2025.01.13
TIL day 18  (1) 2025.01.10
TIL day 17  (1) 2025.01.09
TIL day 16  (2) 2025.01.08
TIL day 15  (0) 2025.01.07
'TIL' 카테고리의 다른 글
  • TIL day 18
  • TIL day 17
  • TIL day 16
  • TIL day 15
gbleem
gbleem
gbleem 님의 블로그 입니다.
  • gbleem
    gbleem 님의 블로그
    gbleem
  • 전체
    오늘
    어제
    • 분류 전체보기 (189)
      • Unreal Engine (73)
      • C++ (19)
      • 알고리즘(코딩테스트) (32)
      • TIL (60)
      • CS (4)
      • 툴 (1)
  • 블로그 메뉴

    • 홈
    • 카테고리
  • 링크

    • 과제용 깃허브
    • 깃허브
    • velog
  • 공지사항

  • 인기 글

  • 태그

    map을 vector로 복사
    addonscreendebugmessage
    매크로 지정자
    Vector
    actor 클래스
    character animation
    gamestate
    DP
    BFS
    cin함수
    additive animation
    motion matching
    상속
    const
    blend pose
    applydamage
    enhanced input system
    템플릿
    싱글턴
    C++
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gbleem
TIL day 14
상단으로

티스토리툴바