Recent Posts
Notice
No Rules Rules
행렬 테두리 회전하기 (feat. 프로그래머스, 77485번) 본문
728x90
반응형
행렬 테두리 회전하기
https://school.programmers.co.kr/learn/courses/30/lessons/77485
반응형
// woohyeon.kim
// https://school.programmers.co.kr/learn/courses/30/lessons/77485
#include <vector>
#include <algorithm>
using namespace std;
int arr[101][101];
vector<int> solution(int rows, int columns, vector<vector<int>> queries) {
int index = 0;
for(int ix = 1, iy; ix <= rows; ++ix)
for(iy = 1; iy <= columns; ++iy)
arr[ix][iy] = ++index;
vector<int> tmp, ans;
for(const auto& query : queries){
tmp.clear();
auto &x1 = query[0], &y1 = query[1], &x2 = query[2], &y2 = query[3];
// 구간의 값들 가져오기
for(int y = y1; y < y2; ++y)
tmp.push_back(arr[x1][y]);
for(int x = x1; x < x2; ++x)
tmp.push_back(arr[x][y2]);
for(int y = y2; y > y1; --y)
tmp.push_back(arr[x2][y]);
for(int x = x2; x > x1; --x)
tmp.push_back(arr[x][y1]);
ans.push_back(*min_element(tmp.begin(), tmp.end())); // 최소값
rotate(tmp.begin(), tmp.end() - 1 , tmp.end()); // 오른쪽으로 한칸 이동
// 이동된 값들 적용시키기
index = 0;
for(int y = y1; y < y2; ++y)
arr[x1][y] = tmp[index++];
for(int x = x1; x < x2; ++x)
arr[x][y2] = tmp[index++];
for(int y = y2; y > y1; --y)
arr[x2][y] = tmp[index++];
for(int x = x2; x > x1; --x)
arr[x][y1] = tmp[index++];
}
return ans;
}
// *&)*@*
- 주어진 영역을 1차원 배열로 변환하고 오른쪽으로 한칸씩 이동시킵니다.
- 이동시킨 1차원 배열을 다시 2차원 배열에 반영시키고 1차원 배열중 최소값을 저장합니다.
728x90
반응형
'생활 > 코테' 카테고리의 다른 글
동전 2 (feat. 백준, 2294번) (0) | 2022.07.25 |
---|---|
메뉴 리뉴얼 (feat. 프로그래머스, 72411번) (0) | 2022.07.25 |
이동하기 (feat. 백준, 11048번) (0) | 2022.07.25 |
내리막 길 (feat. 백준, 1520번) (0) | 2022.07.24 |
낚시왕 (feat. 백준, 17143번) (0) | 2022.07.24 |
Comments