반응형
programmers.co.kr/learn/courses/30/lessons/77485
구현문제였습니다.
풀이방법
돌릴 때 배열의 규칙을 찾아서 회전시키면 됩니다.
1. 먼저 x1,y1의 값은 x라는 변수에 저장합니다.
2. y1+1 ~ y2열까지 확인하면서 tmp를 선언해 arr[x1][i]값을 먼저 저장후 이전 x를 arr[x1][i]에 넣고 x를 tmp로 갱신해줍니다.
3. 같은 방식으로 우측 세로선, 하단 가로선, 좌측 세로선으로 확인하며 배열을 돌리면 됩니다.
4. 돌렸던 값들의 최소값을 answer에 push해줍니다.
Code
#include <bits/stdc++.h>
using namespace std;
int arr[101][101];
int rotate(int x1, int y1, int x2, int y2){
vector <int> num;
int ans = arr[x1][y1];
int x = arr[x1][y1];
for(int i = y1 + 1; i <= y2; i++){
int tmp = arr[x1][i];
ans = min(ans,tmp);
arr[x1][i] = x;
x = tmp;
}
for(int i = x1 + 1; i <= x2; i++){
int tmp = arr[i][y2];
ans = min(ans,tmp);
arr[i][y2] = x;
x = tmp;
}
for(int i = y2-1; i >= y1; i--){
int tmp = arr[x2][i];
ans = min(ans,tmp);
arr[x2][i] = x;
x = tmp;
}
for(int i = x2-1; i >= x1; i--){
int tmp =arr[i][y1];
ans = min(ans,tmp);
arr[i][y1] = x;
x = tmp;
}
return ans;
}
vector<int> solution(int rows, int columns, vector<vector<int>> queries) {
vector<int> answer;
memset(arr,0,sizeof(arr));
int num = 1;
for(int i = 1; i <= rows; i++)
for(int j = 1; j <= columns; j++)
arr[i][j] = num++;
for(int i = 0; i < queries.size(); i++){
int x1 = queries[i][0];
int y1 = queries[i][1];
int x2 = queries[i][2];
int y2 = queries[i][3];
answer.push_back(rotate(x1,y1,x2,y2));
}
return answer;
}
'Algorithm > Implementation' 카테고리의 다른 글
(C++) - 백준(BOJ) 21609번 : 상어 중학교 (0) | 2021.05.05 |
---|---|
(C++) - 백준(BOJ) 21608번 : 상어 초등학교 (0) | 2021.05.05 |
(C++) - 프로그래머스(2021 Dev-Matching: 웹 백엔드 개발자(상반기)) : 압축 (0) | 2021.05.04 |
(C++) - 프로그래머스(2018 KAKAO BLIND RECRUITMENT[3차]) : 압축 (0) | 2021.05.04 |
(C++) - 백준(BOJ) 16935번 : 배열 돌리기 3 답 (0) | 2021.05.03 |