https://www.acmicpc.net/problem/16926
구현
#include <iostream>
using namespace std;
int arr[300][300];
int N, M, R;
int main()
{
cin >> N >> M >> R;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
cin >> arr[i][j];
}
}
//회전
while (R--)
{
//가장자리 셋팅
int x1 = 0;
int x2 = N - 1;
int y1 = 0;
int y2 = M - 1;
while (x1 < x2 && y1 < y2)
{
int temp = arr[x1][y1]; //값 보관
for (int i = y1; i < y2; i++)
{
arr[x1][i] = arr[x1][i + 1];
}
for (int i = x1; i < x2; i++)
{
arr[i][y2] = arr[i + 1][y2];
}
for (int i = y2; i > y1; i--)
{
arr[x2][i] = arr[x2][i - 1];
}
for (int i = x2; i > x1; i--)
{
arr[i][y1] = arr[i - 1][y1];
}
arr[x1 + 1][y1] = temp;
//한칸씩 줄여서 수행
x1++;
y1++;
x2--;
y2--;
}
}
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
cout << arr[i][j] << " ";
}
cout << "\n";
}
}
첫시작위치 + 배열크기(N 또는 M 등)
으로 구하려 했는데 너무 복잡해졌다.(x1,y1)
, (x1,y2)
, (x2,y1)
, (x2,y2)