ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Solving the usaco transform problem in c++
    ALGORITHM/USACO 2019. 8. 11. 22:27
    728x90

    오래걸렸다.

    첫째. 입력을 받는 방식을 완전히 마스터 하지 못했다.

    둘째. c++에서 array를 다루는 부분이 매우 약했다.

     

    char**, char[][],vector, string[], string*를 쓰며 계속계속 배열 범위를 초과하는 문제를 해결해나갔다.

     

    #include <fstream>
    #include <string>
    using namespace std;
    
    bool check(string* input, string* mirror, int N) {
    	for (int i = 0; i < N; i++) {
    		for (int j = 0; j < N; j++) {
    			if (input[i][j] != mirror[i][j])
    				return false;
    		}
    	}
    	return true;
    }
    
    string* rot(string* input, int N) {
    	string* dummy = new string[N];
    	for (int i = 0; i < N; i++) {
    		dummy[i] = input[i];
    	}
    	for (int i = 0; i < N; i++) {
    		for (int j = 0; j < N; j++) {
    			dummy[j][N - i - 1] = input[i][j];
    		}
    	}
    	return dummy;
    }
    string* reflect(string* input, int N) {
    	string* dummy = new string[N];
    	for (int i = 0; i < N; i++) {
    		dummy[i] = input[i];
    	}
    	for (int i = 0; i < N; i++) {
    		for (int j = 0; j < N; j++) {
    			dummy[i][N - j - 1] = input[i][j];
    		}
    	}
    	return dummy;
    }
    
    int main() {
    	ofstream fout("transform.out");
    	ifstream fin("transform.in");
    	int N;
    	string x;
    	string* num1;
    	string* num2;
    	string* num3;
    	string* num4;
    	string* num5_1;
    	string* num5_2;
    	string* num5_3;
    	fin >> N;
    	string input[13];
    	string mirror[13];
    	for (int i = 0; i < N; i++) {
    		fin >> x;
    		input[i] = x;
    	}
    	for (int i = 0; i < N; i++) {
    		fin >> x;
    		mirror[i] = x;
    	}
    	num1 = rot(input, N);
    	num2 = rot(num1, N);
    	num3 = rot(num2, N);
    	num4 = reflect(input, N);
    	num5_1 = reflect(num1, N);
    	num5_2 = reflect(num2, N);
    	num5_3 = reflect(num3, N);
    	if (check(num1, mirror, N)) { //90
    		fout << 1 << endl;
    	}
    	else if (check(num2, mirror, N)) {
    		fout << 2 << endl;
    	}
    	else if (check(num3, mirror, N)) {
    		fout << 3 << endl;
    	}
    	else if (check(num4, mirror, N)) {
    		fout << 4 << endl;
    	}
    	else if (check(num5_1, mirror, N)) {
    		fout << 5 << endl;
    	}
    	else if (check(num5_2, mirror, N)) {
    		fout << 5 << endl;
    	}
    	else if (check(num5_3, mirror, N)) {
    		fout << 5 << endl;
    	}else if (check(input, mirror, N)) {
    		fout << 6 << endl;
    	}
    	else {
    		fout << 7 << endl;
    	}
    	return 0;
    }

    'ALGORITHM > USACO' 카테고리의 다른 글

    Solving USACO palsquare problem in c++  (0) 2019.08.12
    Solving USACO Name That Number problem in c++  (0) 2019.08.11
    Milking Cows /c++  (0) 2019.08.11
    Broken Necklace /c++  (0) 2019.08.11
    Friday the Thirteenth /c++  (0) 2019.08.11

    댓글

Designed by Tistory.