250x250
반응형
Notice
Recent Posts
Recent Comments
Link
N
(프로그래머스 c++)행렬 테두리 회전하기 본문
728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/77485?language=cpp
쿼리로 주어진 좌표를 토대로 가운데 부분을 제외한 행렬의 테두리를 한칸씩 회전하면 된다.
테두리는 총 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
반응형
'프로그래머스 알고리즘 > 2단계' 카테고리의 다른 글
(프로그래머스 JS)방문 길이 (0) | 2022.03.14 |
---|---|
(프로그래머스 JS)배달 (0) | 2021.10.30 |
(프로그래머스 JS)올바른 괄호 (0) | 2021.06.23 |
(프로그래머스 JS)예상 대진표 (0) | 2021.06.15 |
(프로그래머스 JS)땅따먹기 (0) | 2021.06.14 |