숨은 단어

면접 대비

시간 제한2초메모리 제한512 MB

요약
최대 10x10 크기의 글자 격자와 길이 10 이하의 질의 단어 100,000개가 주어질 때, 인접한 칸을 중복 없이 지나 만들어지는 단어의 개수를 센다.
난이도

보통10점 중 7점

유형
백트래킹, DFS, 트라이, 완전 탐색
정답자
아직 제출이 없습니다

문제

Ingrid는 토요일 신문에 실린 격자 숨은 단어 퍼즐을 풀고 있는데, 손으로 하려니 조금 지루하다. 다행히 Ingrid는 프로그래밍을 할 줄 알아서, 퍼즐 사진을 깔끔한 텍스트 형식으로 바꿔 주는 이미지 인식 루틴을 잘 만들어 두었다. 하지만 퍼즐을 실제로 푸는 프로그램을 작성하는 일에서 막혀 있다. 도와줄 수 있겠는가?

단어가 h x w 격자에 포함된다는 것은, 격자의 어떤 칸에서 시작해 그곳에서 이웃한 아직 방문하지 않은 칸으로 걸어가며 단어를 만들 수 있다는 뜻이다. 두 칸이 이웃한다는 것은 대각선 이동을 제외하고 인접해 있다는 뜻이다. 이런 격자와 단어 목록이 주어질 때, 목록에 있는 단어 중 격자에 포함된 단어의 개수를 구하라.

입력

첫째 줄에는 격자의 높이와 너비를 나타내는 두 정수 h와 w가 주어진다 (1 ≤ h, w ≤ 10). 그다음 h개의 줄이 이어지며, 각 줄에는 격자의 한 행을 나타내는 길이 w의 문자열이 주어지는데, 이 문자열은 대문자로만 이루어져 있다. 그다음 줄에는 Ingrid가 찾는 단어의 개수를 나타내는 정수 n이 하나 주어진다 (1 ≤ n ≤ 100 000). 마지막으로 n개의 단어가 각각 한 줄에 하나씩 주어진다. 이 단어들은 길이가 10자를 넘지 않는다.

출력

출력은 하나의 수로, 격자 아래에 있는 단어 중 격자에 포함된 단어의 개수이다.

예제1

  1. 예제 1

    입력
    4 4
    SNKO
    VRER
    IDIN
    NEGU
    3
    KORN
    NEDI
    DER
    
    예상 출력
    2