문제정보
1s 128MB
문제
얼굴 인식 프로그램에서 이미지의 각 픽셀은 알파벳 소문자로 변환되어 처리된다. 예를 들어, n * m 픽셀의 이미지는 m개의 알파벳 소문자가 n개 줄 있는 형태로 변환되는 것이다. 이 과정에서 얼굴 부분은 2 * 2 크기로 고정되며, 얼굴 부분을 구성하는 네 개의 알파벳 소문자를 조합하면 ‘face’라는 단어를 만들 수 있다.
얼굴 인식 프로그램을 활용하여 이미지에서 찾을 수 있는 얼굴의 개수를 출력하는 프로그램을 작성하시오. 이 때, 얼굴로 인식된 2 X 2 형태는 중첩될 수 있다.
얼굴 인식 프로그램을 활용하여 이미지에서 찾을 수 있는 얼굴의 개수를 출력하는 프로그램을 작성하시오. 이 때, 얼굴로 인식된 2 X 2 형태는 중첩될 수 있다.
입력형식
첫째 줄에 공백으로 구분된 n과 m이 주어진다.(1 ≦ n,m ≦ 50)
둘째 줄부터 n개의 줄에는 변환된 이미지 형태가 주어진다. 이 때, 각 줄마다 m개의 알파벳 소문자가 주어진다.
둘째 줄부터 n개의 줄에는 변환된 이미지 형태가 주어진다. 이 때, 각 줄마다 m개의 알파벳 소문자가 주어진다.
출력형식
이미지에서 발견한 얼굴의 수를 출력한다.
힌트
‘face’와 정확히 일치하지 않아도 되므로 ‘face’의 오름차순 정렬값 ‘acef’와 비교한 후 개수를 센다.
따라서, 배열의 현재 위치의 값과 상대적인 위치 (i+1, j), (i, j+1), (i+1, j+1)의 값들을 결합한 후에, 만들어진 문자열마다 ‘acef’와 비교하면 된다.
따라서, 배열의 현재 위치의 값과 상대적인 위치 (i+1, j), (i, j+1), (i+1, j+1)의 값들을 결합한 후에, 만들어진 문자열마다 ‘acef’와 비교하면 된다.
string s[50]; // 문자열 배열을 만들어 2차원 형태의 문자를 입력받는다.
for (int i = 0; i < n; i++)
{
cin >> s[i]; // 한 줄씩 문자열로 입력받는다.
}
for (int i = 0; i < n - 1; i++){ // 가장 아래에 있는 글자는 탐색을 할 필요가 없다.
for (int j = 0; j < m - 1; j++) // 가장 오른쪽에 있는 글자는 탐색을 할 필요가 없다.
{
string w = ""; // 빈문자열을 만들고 상대적인 위치의 문자들을 결합한다.
w += s[i][j];
w += s[i][j + 1];
w += s[i + 1][j];
w += s[i + 1][j + 1];
sort(w.begin(), w.end()); // sort()함수로 오름차순 정렬을 한다. begin()은 문자열의 시작 위치, end()는
if (w == "acef") // 문자열이 끝난 다음 위치를 나타낸다. sort()함수의 사용방법을 잘 알아두자.
f++;
}
}
}
예시 1
입력예시
4 4 xxxx xfax xcex xxxx
출력예시
1
예시 2
입력예시
2 3 fac cef
출력예시
2