C++:: 프로그래머스 <행렬 테두리 회전하기>

jahlee·2023년 6월 12일
0

프로그래머스_Lv.2

목록 보기
56/106
post-thumbnail

단순히 정해진 범위의 직사각형의 테두리를 회전시켜주고 이때 테두리값들중 가장작은값을 결과값으로 가져오면 되는 문제이다.

#include <string>
#include <vector>
using namespace std;

vector<int> solution(int rows, int columns, vector<vector<int>> queries)
{
    vector<int> answer;
    vector<vector<int>> board;
    for(int i=0;i<rows;i++)
    {//기초 배열 생성
        vector<int> tmp(columns);
        for(int j=0;j<columns;j++) tmp[j] = i * columns + j + 1;
        board.push_back(tmp);
    }
    for(auto query : queries)
    {
        int x1 = query[0]-1, y1 = query[1]-1, x2 = query[2]-1, y2 = query[3]-1;
        int num = board[x1][y1], tmp;//맨처음 숫자 num, 교체할때 임시로 담아둘 tmp
        int min_num = num;
        //시계방향으로 숫자 변경
        for(int j=y1+1;j<=y2;j++)
        {
            tmp = board[x1][j];
            board[x1][j] = num;
            num = tmp;
            min_num = min(min_num, num);
        }
        for(int i=x1+1;i<=x2;i++)
        {
            tmp = board[i][y2];
            board[i][y2] = num;
            num = tmp;
            min_num = min(min_num, num);
        }
        for(int j=y2-1;j>=y1;j--)
        {
            tmp = board[x2][j];
            board[x2][j] = num;
            num = tmp;
            min_num = min(min_num, num);
        }
        for(int i=x2-1;i>=x1;i--)
        {
            tmp = board[i][y1];
            board[i][y1] = num;
            num = tmp;
            min_num = min(min_num, num);
        }
        answer.push_back(min_num);
    }
    return answer;
}

0개의 댓글