본문 바로가기

알고리즘 · 코딩

[SWEA 1215] 회문1

SWEA 1215. [S/W 문제해결 기본] 3일차 - 회문1

문제 링크

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14QpAaAAwCFAYi 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


C++ 풀이

#include <iostream>
using namespace std;

int main() {
	for (int tc = 1; tc <= 10; ++tc) {
		char board[8][8];
		int size, count = 0;
		cin >> size;
		bool isEven = size % 2 == 0;
		for (int i = 0; i < 8; ++i) {
			for (int j = 0; j < 8; ++j)
				cin >> board[i][j];
		}

		string a, b;
		for (int i = 0; i < 8; ++i) {
			for (int j = 0; j < 8; ++j) {
				//세로 탐색
				if (i <= 8 - size) {
					a = "", b = "";
					for (int k = i; k < i + size / 2; ++k)
						a += board[k][j];
					//회문 길이가 짝수인 경우
					if (isEven) {
						for (int k = i + size - 1; k >= i + size / 2; --k)
							b += board[k][j];
					}
					//회문 길이가 홀수인 경우
					else {
						for (int k = i + size - 1; k > i + size / 2; --k)
							b += board[k][j];
					}
					if (a == b)
						count++;
				}
				//가로 탐색
				if (j <= 8 - size) {
					a = "", b = "";
					for (int k = j; k < j + size / 2; ++k)
						a += board[i][k];
					//회문 길이가 짝수인 경우
					if (isEven) {
						for (int k = j + size - 1; k >= j + size / 2; --k)
							b += board[i][k];
					}
					//회문 길이가 홀수인 경우
					else {
						for (int k = j + size - 1; k > j + size / 2; --k)
							b += board[i][k];
					}
					if (a == b)
						count++;
				}
			}
		}
		cout << "#" << tc << " " << count << endl;
	}
	return 0;
}

 

왼쪽 위부터 오른쪽 아래 방향으로 차례대로 회문이 존재하는지 탐색하였다.

 

 

반응형

'알고리즘 · 코딩' 카테고리의 다른 글

[SWEA 1249] 보급로  (0) 2021.10.27
[SWEA 1230] 암호문3  (0) 2021.10.27
[SWEA 1221] GNS  (0) 2021.10.21
[SWEA 1213] String  (0) 2021.10.20
[SWEA 1245] 균형점  (0) 2021.10.20