N

(프로그래머스 c++)행렬 테두리 회전하기 본문

프로그래머스 알고리즘/2단계

(프로그래머스 c++)행렬 테두리 회전하기

naeunchan 2021. 6. 24. 17:29
728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/77485?language=cpp

 

코딩테스트 연습 - 행렬 테두리 회전하기

6 6 [[2,2,5,4],[3,3,6,6],[5,1,6,3]] [8, 10, 25] 3 3 [[1,1,2,2],[1,2,2,3],[2,1,3,2],[2,2,3,3]] [1, 1, 5, 3]

programmers.co.kr

 

 

쿼리로 주어진 좌표를 토대로 가운데 부분을 제외한 행렬의 테두리를 한칸씩 회전하면 된다.

테두리는 총 4개이므로 반복문 4개를 통해 한칸씩 땡겨준다.

또한, 각 반복문마다 최소값을 비교하면서 진행해야 한다.

 

#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(rows, vector<int>(columns, 0));
    int number = 1;
    
    for(int i = 0; i < rows; i++){
        for(int j = 0; j < columns; j++){
            board[i][j] = number++;
        }
    }
    
    for(int i = 0; i < queries.size(); i++){
        int x1 = queries[i][0] - 1;
        int y1 = queries[i][1] - 1;
        int x2 = queries[i][2] - 1;
        int y2 = queries[i][3] - 1;
        int min = rows * columns + 1;
        int before = board[x1 + 1][y1];
        
        for(int j = y1; j <= y2; j++){
            int tmp = board[x1][j];
            board[x1][j] = before;
            before = tmp;
            min = min < board[x1][j] ? min : board[x1][j];
        }
        
        for(int i = x1 + 1; i <= x2; i++){
            int tmp = board[i][y2];
            board[i][y2] = before;
            before = tmp;
            min = min < board[i][y2] ? min : board[i][y2];
        }
        
        for(int j = y2 - 1; j >= y1; j--){
            int tmp = board[x2][j];
            board[x2][j] = before;
            before = tmp;
            min = min < board[x2][j] ? min : board[x2][j];
        }
        
        for(int i = x2 - 1; i > x1; i--){
            int tmp = board[i][y1];
            board[i][y1] = before;
            before = tmp;
            min = min < board[i][y1] ? min : board[i][y1];
        }
        
        answer.push_back(min);
    }
    
    return answer;
}
728x90
반응형