TIL day 28

2025. 1. 24. 21:23·TIL

1. 코딩 테스트


오전 코딩테스트로 프로그래머스 level 2 프렌즈 4블록을 풀었습니다.

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

 

프로그래머스

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

programmers.co.kr

  • 뭘로 풀지?
    • while문 안에서 이중 for문을 돌면서, 유효한 값인지 체크한 후 이중for문이 끝나면, board를 리셋해주는 작업을 반복하다가 한번도 터지지 않는 경우 while문을 탈출하면 됩니다.
      1. 이중 for문을 돌면서 2x2 형태를 체크하기 
        • while문 안에서  모든 경우의 수를 체크하면서, 2x2가 모두 같은 경우 시작점을 '0' 으로 체크해 주었습니다.
        • 2x2 칸을 체크하는 것은 Check() 함수를 통해 진행하였습니다.
      2. 이중 for문을 모두 다 돌고 나면, 0으로 체크한 값을 기준으로 board를 다시 구성하는 Reset 함수를 수행하였습니다.
        • Reset함수에서는 temp라는 벡터를 만들어서 미리 사이즈만큼 크기를 잡아둡니다.
        • 다음으로는 이중for문을 통해서 돌면서 0으로 체크한 곳을 찾아서, (x+1, y), (x, y+1), (x+1, y+1) 인 곳을 '1'로 체크해 줍니다.
        • 이때 주의할 점은 (x+1, y), (x, y+1), (x+1, y+1) 인 좌표 중에서 이미 0으로 체크된 곳이 있다면 그대로 0으로 두는 것이 중요합니다.
            • Reset 함수를 돌다가 0인 곳을 모두 다 0으로 바꿔버린다면, 겹쳐진 부분을 찾을수가 없기 때문입니다.
            • 예를 들어 (1,1) 과 (1,2)를 '0'으로 체크한 경우
              • (1,1) 이 0인 것을 발견하고, (1,2) (2,1) (2,2)를 모두 0으로 바꿔버린다면, (1,2) 값을 0으로 체크해 둔 것이 겹쳐서 없어져버리기 때문입니다.
              • 그렇기 때문에 0은 그대로 두고, 나머지 3곳의 좌표가 0이 아닌 경우는 1로 바꿔준다면, 겹치지 않고 체크를 할 수 있습니다.
              • 아래의 사진을 참고하면 됩니다.
        • Reset 함수안에서 이중 for문이 끝난 이후에는 새로운 이중 for문을 통해 우리가 숫자로 써둔 곳의 갯수를 세서 answer에 더해주면 됩니다.
        • 마지막으로 board 벡터를 row가 가장 큰 값에서부터 역으로 확인하면서, 우리가 숫자로 써둔 곳을 무시하면서 temp 벡터에 값을 넣어준 다음 board를 clear 하고, temp값을 넣어주면 됩니다.
      3. 한번도 Check()함수에 걸리지 않은 경우 while문을 탈출해서 answer를 return 해주면 됩니다.
    • 정답 코드
#include <string>
#include <vector>
using namespace std;

int answer = 0;
int row;
int col;

void Reset(vector<string>& board)
{
    vector<string> temp(row);
    for (int i = 0; i < row; ++i)
    {
        temp[i].resize(col, ' ');
    }

    for (int i = 0; i < row; ++i)
    {
        for (int j = 0; j < col; ++j)
        {
            if (board[i][j] == '0')
            {
                if (board[i + 1][j] != '0')
                {
                    board[i + 1][j] = '1';
                }
                if (board[i][j + 1] != '0')
                {
                    board[i][j + 1] = '1';
                }
                if (board[i + 1][j + 1] != '0')
                {
                    board[i + 1][j + 1] = '1';
                }
            }
        }
    }

    for (int i = 0; i < row; ++i)
    {
        for (int j = 0; j < col; ++j)
        {
            if (board[i][j] == '1' || board[i][j] == '0')
                answer++;
        }
    }


    int tempRow = row - 1;
    for (int i = 0; i < col; ++i)
    {
        for (int j = row - 1; j >= 0; --j)
        {
            if (isalpha(board[j][i]))
            {
                temp[tempRow][i] = board[j][i];
                tempRow--;
            }
        }
        tempRow = row - 1;
    }
    board.clear();
    board = temp;
}

bool Check(int x, int y, vector<string>& board)
{
    char cmp = board[x][y];
    if (!isalpha(cmp))
        return false;
    if (x + 1 >= row || y + 1 >= col)
        return false;
    if (board[x + 1][y] == cmp && board[x][y + 1] == cmp && board[x + 1][y + 1] == cmp)
        return true;
    else
        return false;
}

int solution(int m, int n, vector<string> board)
{
    row = m;
    col = n;

    while (1)
    {
        bool bomb = false;

        for (int i = 0; i < row; ++i)
        {
            for (int j = 0; j < col; ++j)
            {
                if (Check(i, j, board))
                {
                    board[i][j] = '0';
                    bomb = true;
                }
            }
        }
        //한번도 안터진 경우는 끝
        if (!bomb)
            break;
        //board 내려주기
        Reset(board);
    }

    return answer;
}

 

 

 

2. 캐릭터 애니메이션 관련 정리


https://gbleem.tistory.com/52

 

Unreal Engine - 캐릭터 만들기

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

gbleem.tistory.com

  • 정리가 다 끝나지 않아서, 주말에 마무리 할 예정입니다.  -> 완료

'TIL' 카테고리의 다른 글

TIL day 30  (2) 2025.01.31
TIL day 29  (2) 2025.01.27
TIL day 27  (0) 2025.01.23
TIL day 26  (0) 2025.01.22
TIL day 25  (1) 2025.01.21
'TIL' 카테고리의 다른 글
  • TIL day 30
  • TIL day 29
  • TIL day 27
  • TIL day 26
gbleem
gbleem
gbleem 님의 블로그 입니다.
  • gbleem
    gbleem 님의 블로그
    gbleem
  • 전체
    오늘
    어제
    • 분류 전체보기 (189)
      • Unreal Engine (73)
      • C++ (19)
      • 알고리즘(코딩테스트) (32)
      • TIL (60)
      • CS (4)
      • 툴 (1)
  • 블로그 메뉴

    • 홈
    • 카테고리
  • 링크

    • 깃허브
    • velog
  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바