안녕하세요. 이번 포스팅에서는 Programmers 행렬 테두리 회전하기 문제를 풀어보도록 하겠습니다.
해당 문제는
https://programmers.co.kr/learn/courses/30/lessons/77485
위 링크에서 확인하실 수 있습니다.
문제의 특별한 제한은 딱히 없고, 단순 구현으로 해결하시면 됩니다.
저의 경우
1. vector<int> v를 선언하여 시계방향으로 원소를 담아주었습니다.
2. v를 rotate 함수를 활용하여 한 칸씩 뒤로 미뤄주었습니다.
3. 미뤄진 칸을 기반으로 다시 원래의 자리에 넣어주었습니다. 이때 v에서 min_element를 매번 answer에 저장해주었습니다.
<소스 코드>
#include <bits/stdc++.h>
using namespace std;
int arr[104][104];
vector<int> solution(int rows, int columns, vector<vector<int>> queries) {
vector<int> answer;
int cnt = 1;
for(int i = 1; i <= rows; i++)
for(int j = 1; j <= columns; j++) arr[i][j] = ((i-1) * columns + j);
for(int i = 0; i < queries.size(); i++) {
vector<int> query = queries[i];
vector<int> v;
int x1 = query[0], y1 = query[1], x2 = query[2], y2 = query[3];
for(int i = y1; i <= y2; i++) v.push_back(arr[x1][i]);
for(int i = x1+1; i <= x2; i++) v.push_back(arr[i][y2]);
for(int i = y2-1; i >= y1; i--) v.push_back(arr[x2][i]);
for(int i = x2-1; i >= x1+1; i--) v.push_back(arr[i][y1]);
rotate(v.begin(), v.end()-1, v.end());
int idx = 0;
for(int i = y1; i <= y2; i++) arr[x1][i] = v[idx++];
for(int i = x1+1; i <= x2; i++) arr[i][y2] = v[idx++];
for(int i = y2-1; i >= y1; i--) arr[x2][i] = v[idx++];
for(int i = x2-1; i >= x1+1; i--) arr[i][y1] = v[idx++];
answer.push_back(*min_element(v.begin(), v.end()));
}
return answer;
}
*저의 글에 대한 피드백이나 지적은 언제나 환영합니다.
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] [3차] 파일명 정렬 (0) | 2021.10.08 |
---|---|
[Programmers] 위클리 챌린지 9 (+ 위클리 챌린지 8) (0) | 2021.10.05 |
[Programmers] 모두 0으로 만들기 (0) | 2021.10.05 |
[Programmers] 튜플 (0) | 2021.09.24 |
[Programmers] 위클리 챌린지 7 (0) | 2021.09.23 |