티스토리 뷰

문제

<그림1: 문제 설명>

함수 2개 만들어서 썼음

1. 주어진 행렬 90도 회전하는 함수

2. 주어진 크기 n에 대해 행렬비교해서 원소가 전부동일한지 체크하는 함수

 

#include<iostream>
using namespace std;
void rotateclockwisematrix(char** N, int n) {
	char** temp;
	temp = new char* [n];
	for (int i = 0; i < n; i++) temp[i] = new char[n];
	
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			temp[i][j] = N[i][j];
		}
	}
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			N[j][n-1-i] = temp[i][j];
		}
	}
	for (int i = 0; i < n; i++) delete[] temp[i];
}

bool checkifequalmat(char** Nmat,char**nmat, int i,int j,int n) { //n is the size of nmat 
	bool equal = true;
	for (int p = 0; p < n; p++) {
		for (int q = 0; q < n; q++) { //i & j is the offset of Nmat
			if (Nmat[i + p][j + q] != nmat[p][q]) equal = false;
		}
	}
	return equal;
}

int main() {
	int N, n; 
	char** Nmat;
	char** nmat;
	int result[4];
	while (cin >> N >> n) {
		if (N == 0 && n == 0) break; 
	
		Nmat = new char* [N];
		for (int i = 0; i < N; i++) Nmat[i] = new char[N];
		nmat = new char* [n];
		for (int i = 0; i < n; i++) nmat[i] = new char[n];     

		for (int i = 0; i < 4; i++) result[i] = 0; 
	
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N; j++) cin >> Nmat[i][j];
		}
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) cin >> nmat[i][j];
		}
	
		for (int k = 0; k < 4; k++) {
			for (int i = 0; i < N - n + 1; i++) { 
				for (int j = 0; j < N - n + 1; j++) {
					if (checkifequalmat(Nmat, nmat, i, j, n)) ++result[k];
				}
			}
			rotateclockwisematrix(nmat, n);
		}
		for (int i = 0; i < 3; i++) cout << result[i] << " ";
		cout << result[3] << endl;
	}
	return 0;
}

아 for문이 몇중이야..

댓글