Problem Solving/SWEA
[SWEA] #1215 _ 회문1
Grini
2019. 8. 4. 10:02
[회문1] https://swexpertacademy.com/main/code/problem/problemDetail.do
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
직선으로 된 주어진 길이의 회문을 찾는 문제이다.
1행 1열 부터 가로, 세로로 회문인지 검사하여 카운트한다.
(주어진 길이에서 검사할 수 있는 모든 경우 검사)
[ 소스 코드 ]
#include <cstdio>
using namespace std;
int len;
char arr[9][9];
int palindrome(int r, int c);
int main() {
int count = 0;
for (int i = 0; i < 10; i++) {
scanf("%d", &len);
for (int j = 0; j < 8; j++) {
for (int k = 0; k < 8; k++) {
scanf("%c", &arr[j][k]);
if (arr[j][k] == '\n') scanf("%c", &arr[j][k]);
}
}
count = 0;
for (int j = 0; j < 8; j++) {
for (int k = 0; k < 8; k++) {
count += palindrome(j, k);
}
}
printf("#%d %d\n", i + 1, count);
}
return 0;
}
int palindrome(int r, int c) {
int tmp_r = r, tmp_c = c, cmp_r = r + len - 1, cmp_c = c + len - 1;
int count = 0;
if (cmp_r < 8) {
while (1) {
if (cmp_r < tmp_r) {
count++;
break;
}
if (arr[c][tmp_r] != arr[c][cmp_r]) break;
tmp_r++;
cmp_r--;
}
}
if (cmp_c < 8) {
while (1) {
if (cmp_c < tmp_c) {
count++;
break;
}
if (arr[tmp_c][r] != arr[cmp_c][r]) break;
tmp_c++;
cmp_c--;
}
}
return count;
}