https://www.acmicpc.net/problem/16926
16926번: 배열 돌리기 1
크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5]
www.acmicpc.net
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void rotate(int depth, vector<vector<int>>& inputArr, int row, int col)
{
vector<vector<int>> tmp(row, vector<int>(col, 0));
for (int k = 0; k < depth; k++)
{
int r1 = k;
int c1 = k;
int r2 = row - k - 1;
int c2 = col - k - 1;
//좌
for (int i = r2 - 1; i >= r1; i--)
{
tmp[i + 1][c1] = inputArr[i][c1];
}
//하
for (int i = c2 - 1; i >= c1; i--)
{
tmp[r2][i + 1] = inputArr[r2][i];
}
//우
for (int i = r1 + 1; i <= r2; i++)
{
tmp[i - 1][c2] = inputArr[i][c2];
}
//상
for (int i = c1 + 1; i <= c2; i++)
{
tmp[r1][i - 1] = inputArr[r1][i];
}
}
inputArr = tmp;
}
int main()
{
int n, m, r;
cin >> n >> m >> r;
vector<vector<int>> arr(n,vector<int>(m,0));
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cin >> arr[i][j];
}
}
int minL = min(n, m);
if (!(minL % 2 == 0)) // 2로 안나누어지면 return
return 0;
int cnt = minL / 2; //총 cnt 만큼의 묶음이 나옴
while (r--)
{
rotate(cnt, arr, n, m);
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout << arr[i][j]<<' ';
}
cout << '\n';
}
}
그냥 하드코딩을 상하좌우로 해주면 된다
'백준 c++' 카테고리의 다른 글
백준 2609 c++ 최대공약수와 최소공배수 (0) | 2024.01.25 |
---|---|
백준 17425 c++ 약수의 합 (0) | 2024.01.25 |
백준 1037 c++ 약수 (0) | 2024.01.23 |
백준 4375 c++ 1 (1) | 2024.01.22 |
백준 2904 c++ 수학은 너무 쉬워 (0) | 2023.03.09 |