학습 정리/👨‍💻 PS Study

[C] 백준 16926번 - 배열 돌리기1

무딘붓 2022. 7. 9. 21:28

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

(21.11.07)

16926번: 배열 돌리기1 - C언어 풀이

 

[소스코드]

#pragma warning(disable:4996)
#include <stdio.h>
// [baekjoon] 16926번 - 배열 돌리기1

int main() {
	
	int n, m, r;					
	scanf("%d %d %d", &n, &m, &r);	
	
	int ar[300][300] = { 0 };
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			scanf("%d", &ar[i][j]);
		}
	}
	int min = n;
	if (n > m) min = m;
	
	for (int a = 0; a < r; a++) {
		int newar[300][300] = { 0 };
		for (int b = 0; b < min / 2; b++) {
			int maxn = n - b - 1;
			int maxm = m - b - 1;
			int nn = b;
			int mm = b;			

			for (int c = 0; c < maxn - b; c++, nn++) {//서쪽
				newar[nn + 1][mm] = ar[nn][mm];				
			}
			for (int c = 0; c < maxm - b; c++, mm++) {//남쪽
				newar[nn][mm + 1] = ar[nn][mm];
			}
			for (int c = 0; c < maxn - b; c++, nn--) {//동쪽
				newar[nn - 1][mm] = ar[nn][mm];
			}
			for (int c = 0; c < maxm - b; c++, mm--) {//북쪽
				newar[nn][mm - 1] = ar[nn][mm];
			}
		}

		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				ar[i][j] = newar[i][j];
			}
		}		

	}
	
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			printf("%d ", ar[i][j]);
		}
		printf("\n");
	}


	return 0;
}

반복문만 계속 사용해서 풀어낸 구현 문제.​

입력받은 배열과 같은 크기의 임시 배열을 만들고,
임시 배열에 조건에 맞춰 원소의 값을 넣으면 쉽게 풀린다.