※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 24725번 문제인 엠비티아이이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/24725 

 

24725번: 엠비티아이

Your program is to read from standard input. The input starts with an integer $N, M$ ( $1 \leq N,M \leq 200$ ) representing rows and columns of boards. Following this are $N$ lines containing $M$ uppercase characters how does the alphabet board consist 

www.acmicpc.net

주어지는 격자에서 가로 세로 대각선의 총 여덟가지 방향으로 MBTI에 해당하는 문자열을 찾을 때마다 답에 1씩 더하는 문제이다.

 

글쓴이는 첫번째 두번째 세번째 네번째 각각의 순서에 올 수 있는 글자를 대응시키는 배열을 만들어 구현했다.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <string>
using namespace std;

int R, C;
string s[200];
bool mbti1[128];
bool mbti2[128];
bool mbti3[128];
bool mbti4[128];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	mbti1['E'] = mbti1['I'] = 1;
	mbti2['N'] = mbti2['S'] = 1;
	mbti3['F'] = mbti3['T'] = 1;
	mbti4['P'] = mbti4['J'] = 1;

	cin >> R >> C;
	for (int r = 0; r < R; r++) cin >> s[r];

	int cnt = 0;
	for (int r = 0; r < R; r++) {
		for (int c = 0; c < C - 3; c++) {
			if (mbti1[s[r][c]] && mbti2[s[r][c + 1]] && mbti3[s[r][c + 2]] && mbti4[s[r][c + 3]]) cnt++;
			if (mbti4[s[r][c]] && mbti3[s[r][c + 1]] && mbti2[s[r][c + 2]] && mbti1[s[r][c + 3]]) cnt++;
		}
	}

	for (int c = 0; c < C; c++) {
		for (int r = 0; r < R - 3; r++) {
			if (mbti1[s[r][c]] && mbti2[s[r + 1][c]] && mbti3[s[r + 2][c]] && mbti4[s[r + 3][c]]) cnt++;
			if (mbti4[s[r][c]] && mbti3[s[r + 1][c]] && mbti2[s[r + 2][c]] && mbti1[s[r + 3][c]]) cnt++;
		}
	}

	for (int r = 0; r < R - 3; r++) {
		for (int c = 0; c < C - 3; c++) {
			if (mbti1[s[r][c]] && mbti2[s[r + 1][c + 1]] && mbti3[s[r + 2][c + 2]] && mbti4[s[r + 3][c + 3]]) cnt++;
			if (mbti4[s[r][c]] && mbti3[s[r + 1][c + 1]] && mbti2[s[r + 2][c + 2]] && mbti1[s[r + 3][c + 3]]) cnt++;
		}
	}
	for (int r = 3; r < R; r++) {
		for (int c = 0; c < C - 3; c++) {
			if (mbti1[s[r][c]] && mbti2[s[r - 1][c + 1]] && mbti3[s[r - 2][c + 2]] && mbti4[s[r - 3][c + 3]]) cnt++;
			if (mbti4[s[r][c]] && mbti3[s[r - 1][c + 1]] && mbti2[s[r - 2][c + 2]] && mbti1[s[r - 3][c + 3]]) cnt++;
		}
	}

	cout << cnt;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 24954 // C++] 물약 구매  (0) 2022.07.10
[BOJ 15241 // C++] Counting paths  (0) 2022.07.10
[BOJ 15233 // C++] Final Score  (0) 2022.07.10
[BOJ 14499 // C++] 주사위 굴리기  (0) 2022.07.10
[BOJ 17773 // C++] Fortune Telling  (0) 2022.07.09

+ Recent posts