ALGORITHM/USACO
Solving the usaco transform problem in c++
Woogamza
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;
}