본문 바로가기
Coding Test/Programmers

[Programmers] (2021 Dev-Matching: 웹 백엔드 개발자(상반기)) Lv 2. 행렬 테두리 회전하기

by song.ift 2023. 11. 14.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

#include <string>
#include <vector>

using namespace std;

enum EDIR
{
    RIGHT,
    DOWN,
    LEFT,
    UP,
    END
};

vector<int> solution(int rows, int columns, vector<vector<int>> queries) {
    vector<int> answer;
    vector<vector<int>> board;
    const int move[EDIR::END][2] = { { 0, 1 }, { 1, 0 }, { 0, -1 }, { -1, 0 } };

    int cnt = 1;
    for (int i = 0; i < rows; i++)
    {
        std::vector<int> v;
        for (int j = 0; j < columns; j++) v.push_back(cnt++);
        board.push_back(v);
    }

    for (const auto& pos : queries)
    {
        int start[] = { pos[0], pos[1] };
        int temp = board[start[0] - 1][start[1] - 1], resMin = 99999;

        for (int dir = static_cast<int>(EDIR::RIGHT); dir < EDIR::END; ++dir)
        {
            while (true)
            {
                int nPos[] = { start[0] + move[dir][0], start[1] + move[dir][1] };

                if (nPos[0] < pos[0] || nPos[0] > pos[2] || nPos[1] < pos[1] || nPos[1] > pos[3])
                    break;

                for (int i = 0; i < 2; ++i)
                    start[i] += move[dir][i];

                swap(temp, board[nPos[0] - 1][nPos[1] - 1]);
                resMin = min(temp, resMin);
            }
        }
        answer.push_back(resMin);
    }

    return answer;
}

GitHub : https://github.com/developeSHG/Algorithm-Baekjoon_Programmers/commit/7bb9d3b1f9ba393167307a028816ac52b64f90fb#diff-a7804905429e0672ec036acf5cdcbc69c260a21bdf329873de2861a832593e3c

 

[level 2] Title: 행렬 테두리 회전하기, Time: 3.19 ms, Memory: 5.96 MB -Baekjoo… · developeSHG/Algorithm-Baekjoon_Pro

…nHub

github.com

 

댓글