어흥
[프로그래머스] 행렬 테두리 회전하기 (C++) 본문
728x90
반응형
문제 링크: programmers.co.kr/learn/courses/30/lessons/77485
1. 주의할 점
- 배열을 시계방향으로 한칸씩만 민다
- 매 쿼리마다 최소값을 초기화하고 시작한다
2. 구현
- Arr[][] 배열에 알맞은 숫자들을 미리 할당한다
- Comp() 함수를 통해 최소값을 갱신한다
- 쿼리마다 Mini값을 초기화 시켜준다
- (y1,x1)의 좌표를 Temp에 저장시키고, 중앙을 기준으로 좌하우상 기준으로 한칸씩 민다. 이때, 미는 배열의 원소를 Mini와 비교하여 최소값을 계속 갱신하도록 설정한다
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
int arr[100][100];
int mini;
void comp(int val){
mini = min(mini,val);
}
vector<int> solution(int row, int col, vector<vector<int>> queries) {
vector<int> answer;
for(int i=0;i<row;i++)
for(int j=0;j<col;j++)
arr[i][j] = i*col+j+1;
for(int k=0;k<queries.size();k++){
mini = row*col;
int y1 = queries[k][0]-1;
int x1 = queries[k][1]-1;
int y2 = queries[k][2]-1;
int x2 = queries[k][3]-1;
int temp = arr[y1][x1];
comp(temp);
for(int i=y1;i<y2;i++){
arr[i][x1]=arr[i+1][x1];
comp(arr[i+1][x1]);
}
for(int j=x1;j<x2;j++){
arr[y2][j] = arr[y2][j+1];
comp(arr[y2][j+1]);
}
for(int i=y2;i>y1;i--){
arr[i][x2] = arr[i-1][x2];
comp(arr[i-1][x2]);
}
for(int j=x2;j>x1+1;j--){
arr[y1][j] = arr[y1][j-1];
comp(arr[y1][j-1]);
}
arr[y1][x1+1]=temp;
answer.push_back(mini);
}
return answer;
}
728x90
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 가장 먼 노드 (C++) (0) | 2021.05.04 |
---|---|
[프로그래머스] 다단계 칫솔 판대 (C++) (0) | 2021.05.04 |
[프로그래머스] 로또의 최고 순위와 최저 순위 (C++) (0) | 2021.05.03 |
[프로그래머스] 경주로 건설 (C++) (0) | 2021.04.30 |
[프로그래머스] 보석 쇼핑 (C++) (0) | 2021.04.30 |
Comments