아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

회문 경로

시간 제한1초메모리 제한256 MB

요약
N by N 문자 격자의 왼쪽 위에서 오른쪽 아래까지 오른쪽이나 아래쪽으로 이동해 만들 수 있는 서로 다른 팰린드롬 문자열 개수를 구합니다.
난이도

보통10점 중 7점

유형
DFS, 해시맵, 문자열
정답자
아직 제출이 없습니다

문제

농장은 N×NN \times N 크기의 격자이고 (2≤N≤182 \le N \le 18), 각 칸에는 A부터 Z까지의 대문자가 하나씩 적혀 있다.

소 베시는 매일 왼쪽 위 칸에서 출발해 오른쪽 아래 칸까지 걸어간다. 한 번 움직일 때마다 오른쪽으로 한 칸 또는 아래로 한 칸 이동한다. 출발 칸과 도착 칸을 포함해 지나간 칸의 글자를 순서대로 읽으므로, 한 번의 산책은 길이 2N−12N-1인 문자열 하나를 만든다.

이 문자열이 회문이면 베시는 방향 감각을 잃는다. 회문은 앞에서 읽으나 뒤에서 읽으나 같아서 자신이 어느 쪽으로 걸었는지 헷갈리기 때문이다.

베시가 만들 수 있는 회문의 개수를 구하라. 서로 다른 경로가 같은 회문을 만들면 한 번만 센다.

다음 격자를 보자.

ABCD
BXZX
CDXB
WCBA

ABXZXBA를 만드는 경로는 여러 개지만, 베시가 만들 수 있는 회문은 ABCDCBA, ABCWCBA, ABXZXBA, ABXDXBA 네 개뿐이다.

입력

첫째 줄에 NN이 주어진다. 다음 NN개 줄에는 격자의 한 행씩이 주어지며, 각 줄은 A부터 Z까지의 문자 NN개로 이루어져 있다.

출력

베시가 만들 수 있는 서로 다른 회문의 개수를 출력한다.

예제5

  1. 예제 1

    입력
    4
    ABCD
    BXZX
    CDXB
    WCBA
    
    예상 출력
    4
    
  2. 예제 2

    입력
    2
    AB
    CA
    
    예상 출력
    2
    
  3. 예제 3

    입력
    2
    AB
    CD
    
    예상 출력
    0
    
  4. 예제 4

    입력
    2
    AA
    AA
    
    예상 출력
    1
    
  5. 예제 5

    입력
    3
    ABA
    BAB
    ABA
    
    예상 출력
    1