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;
}