백준 c++

백준 16926 c++ 배열 돌리기 1

현구구 2024. 1. 23. 12:10

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