C++ TIL day 13

2025. 1. 3. 20:02·C++

1. string 관련 함수 정리

  • 어제 코딩테스트를 풀다가 다른 사람들의 풀이를 보던 도중, 내가 잘 쓰지 않는 함수들을 발견해서 이번 기회에 기억해보려고, 정리해 보았다.

https://gbleem.tistory.com/21

 

string 관련 함수들 (tolower, isalpha, transform)

문제 풀다가 접하게 된 string 처리 관련 함수를 정리해 보았다.참고한 자료는https://modoocode.com/275 C++ 레퍼런스 - transform 함수모두의 코드 C++ 레퍼런스 - transform 함수 작성일 : 2019-04-19 이 글은 21195

gbleem.tistory.com

2. 람다식

  • 위에서 말한 string 관련 함수들에 대해 공부하던 도중, 람다식을 쓰는 예제가 있어서 정리를 해보게 되었다. (C++공부를 하다보면, 화수분처럼 궁금한게 계속 튀어나오네요..)

https://gbleem.tistory.com/22

 

Lambda Expressions

transform과 for_each 함수를 공부하다 람다식을 사용하는 것을 보고 정리를 해보게 되었다.참고한 문서는 아래와 같다https://learn.microsoft.com/ko-kr/cpp/cpp/lambda-expressions-in-cpp?view=msvc-170 C++ 람다 식자세

gbleem.tistory.com

3. 코딩 테스트

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

 

프로그래머스

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

programmers.co.kr

  • 오늘 오전 코드카타 시간에는 프로그래머스 level 2의 삼각 달팽이 문제를 풀었다.

문제 이미지

  • 이것과 비슷한 문제를 예전 코딩테스트에서 풀게 되었는데, 그 때 풀지 못해서 공부해 두었던 개념을 이용해서 해결을 했다.
  • 이 문제는 결론적으로 dx dy를 잘 써서, 아래와 같은 그림으로 배열을 구성하면 되는 문제이다.

  • dx dy 테크닉
    • bfs나 2차원 배열에서 격자를 돌아다는 종류의 문제들은 dx dy를 잘 이용해서 풀면, 생각보다 쉽게 해결할 수 있다.
    • dx dy 테크닉에서 기억할 것
      • 내가 가고자 하는 방향을 순서대로 적어두기 (시계방향, 반시계 방향 등)
      • 헷갈리지 않으려면 아래의 방향을 잘 기억하기
        • x가 증가하는 방향은 행이 증가하는 방향
        • y가 증가하는 방향은 열이 증가하는 방향
        • 아래 코드에서는 (1,0), (0,1) (-1, -1) 순서로 이동할 텐데 이방향은 각각 아래의 의미를 뜻한다.
          • (1,0) 아래로 (행이 증가)
          • (0,1) 오른쪽으로 (열이 증가)
          • (-1,-1) 왼쪽 대각 위로 (행과 열이 감소)
  • 코드 해석
    • 위에서 말한 것 처럼 dx dy는 우리가 이동할 방향을 뜻한다.
      • (1,0), (0,1), (-1,-1) 순서로 배치한 이유는 달팽이의 이동 경로가 아래 -> 오른쪽 -> 왼쪽위 대각선 이므로
      • dir이라는 변수를 통해 경로가 바뀌는 순간 dx, dy의 값을 바꿔주면 되기 때문이다.
    • nx, ny는 다음 스텝에서 우리가 갈 위치를 뜻한다.
      • 이때 우리는 언제 달팽이의 방향이 바뀌는지 체크해야 한다.
      • 다음 스텝으로 갈 위치에 이미 숫자가 있거나, n의 갯수를 넘어설 때 방향을 바꿔주어야 한다.
      • 그래서 이 두 가지 경우에 dir + 1을 통해 쉽게 이동하는 모습을 구현할 수 있다.
#include <string>
#include <vector>
#include <iostream>
using namespace std;

int board[1002][1002];
int dx[3] = { 1, 0, -1 };
int dy[3] = { 0, 1, -1 };

vector<int> Print(int n)
{
    vector<int> ans;

    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < n; ++j)
        {
            if (board[i][j] != 0)
                ans.push_back(board[i][j]);
        }
    }
    return ans;
}

vector<int> solution(int n)
{
    vector<int> answer;

    int total = 0;
    for (int i = 1; i <= n; ++i)
        total += i;

    pair<int, int> cur = { 0, 0 };
    int dir = 0;
    board[0][0] = 1;

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

        if (board[nx][ny] != 0)
        {
            dir = (dir + 1) % 3;
            nx = cur.first + dx[dir];
            ny = cur.second + dy[dir];
        }
        else if (nx >= n || ny >= n)
        {
            dir = (dir + 1) % 3;
            nx = cur.first + dx[dir];
            ny = cur.second + dy[dir];
        }

        board[nx][ny] = board[cur.first][cur.second] + 1;
        cur = { nx, ny };
    }

    answer = Print(n);

    return answer;
}

 

'C++' 카테고리의 다른 글

C++ 면접 대비 정리  (0) 2025.01.09
C++ 디자인 패턴  (0) 2025.01.06
Lambda Expressions  (0) 2025.01.03
C++ TIL day 12  (1) 2025.01.02
C++ TIL day 11 (포인터 연산 문제)  (2) 2024.12.31
'C++' 카테고리의 다른 글
  • C++ 면접 대비 정리
  • C++ 디자인 패턴
  • Lambda Expressions
  • C++ TIL day 12
gbleem
gbleem
gbleem 님의 블로그 입니다.
  • gbleem
    gbleem 님의 블로그
    gbleem
  • 전체
    오늘
    어제
    • 분류 전체보기 (184)
      • Unreal Engine (73)
      • C++ (19)
      • 알고리즘(코딩테스트) (27)
      • TIL (60)
      • CS (4)
      • 툴 (1)
  • 블로그 메뉴

    • 홈
    • 카테고리
  • 링크

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

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바