알고리즘 :: 백준 :: 시뮬레이션 :: 16927 :: 배열 돌리기2

Embedded June·2021년 4월 7일
0

알고리즘::백준

목록 보기
90/109

문제

문제접근

문제 이해

  • 알고리즘 :: 백준 :: 시뮬레이션 :: 16926 :: 배열 돌리기1 (velog.io) 문제와 동일한 문제입니다.
  • 연산 회수가 10910^9로 증가했습니다.
  • 하지만, 저희는 이전 문제에서 각 그룹의 원소 개수로 모듈라한 횟수만큼 회전하는 방식을 채택했으므로 연산 회수가 증가해도 수행속도에는 전혀 차이가 없습니다.
  • 따라서 이전 코드를 그대로 제출해도 AC를 받으실 수 있습니다.

코드

#include <iostream>
#include <vector>
using namespace std;
int main() {
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int N, M, R;
	cin >> N >> M >> R;
	vector<vector<int>> a(N, vector<int>(M));
	for (int y = 0; y < N; ++y)
		for (int x = 0; x < M; ++x)
			cin >> a[y][x];
			
	int ng = min(N, M) / 2;
	vector<vector<int>> groups;
	for (int g = 0; g < ng; ++g) {
		vector<int> group;
        int xmax = M - g - 1, ymax = N - g - 1;
		for (int x = g; x < xmax; ++x) group.push_back(a[g][x]);
		for (int y = g; y < ymax; ++y) group.push_back(a[y][xmax]);
		for (int x = xmax; x > g; --x) group.push_back(a[ymax][x]);
		for (int y = ymax; y > g; --y) group.push_back(a[y][g]);
		groups.push_back(group);
	}
	for (int g = 0; g < ng; ++g) {
		vector<int> &group = groups[g];
		int len = group.size(), idx = R % len;
        	int xmax = M - g - 1, ymax = N - g - 1;
		for (int x = g; x < xmax; ++x, idx = (idx + 1) % len) a[g][x] = group[idx];
		for (int y = g; y < ymax; ++y, idx = (idx + 1) % len) a[y][xmax] = group[idx];
		for (int x = xmax; x > g; --x, idx = (idx + 1) % len) a[ymax][x] = group[idx];
		for (int y = ymax; y > g; --y, idx = (idx + 1) % len) a[y][g] = group[idx];
	}
	for (int y = 0; y < N; ++y) {
		for (int x = 0; x < M; ++x)
			cout << a[y][x] << ' ';	
		cout << '\n';
	}
}

결과

profile
임베디드 시스템 공학자를 지망하는 컴퓨터공학+전자공학 복수전공 학부생입니다. 타인의 피드백을 수용하고 숙고하고 대응하며 자극과 반응 사이의 간격을 늘리며 스스로 반응을 컨트롤 할 수 있는 주도적인 사람이 되는 것이 저의 20대의 목표입니다.

0개의 댓글