KUMOH 문자열

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

요약
N개의 문자열을 격자에 놓고 1번째 열과 N번째 행에서 시작하는 각 대각선을 읽어, KUMOH가 정방향과 역방향 중 더 많이 나타나는 횟수를 세어 합산한다.
난이도

보통10점 중 4점

유형
문자열, 시뮬레이션, 구현, 문자열 매칭
정답자
아직 제출이 없습니다

문제

보경이는 문자열을 가지고 노는 것을 좋아한다. 특히 KUMOH라는 문자열을 아주 좋아한다.

매번 세로와 가로로 KUMOH를 찾는 것이 지루했던 보경이는, 이번에는 대각선으로 읽어 KUMOH를 찾기로 하였다.

우선 NN개의 행과 1,0001\\,000개의 열로 이루어진 격자를 준비한다. (i,j)(i,j)는 위에서부터 ii번째 행, 왼쪽에서부터 jj번째 열이 교차하는 칸을 나타낸다. 모든 칸에는 최초에 아무 문자도 적혀있지 않다.

K, U, M, O, H로 이루어진 NN개의 문자열 S_1,S_2,⋯ ,S_NS\_1,S\_2,\cdots,S\_N이 주어진다. 보경이는 문자열 S_iS\_i의 jj번째 문자를 (i,j)(i,j)에 적었다.

보경이는 다음과 같이 문자열을 읽어 나갈 것이다.

  • 먼저 11번째 열의 모든 칸을 위에서 아래 순서로 나열하고, 이어서 NN번째 행의 모든 칸을 왼쪽에서 오른쪽 순서로 나열한다. 단, (N,1)(N,1)칸은 한 번만 포함한다.

  • 이렇게 만들어진 칸들의 순서열을 A_1,A_2,⋯ ,A_kA\_1, A\_2, \cdots , A\_k라고 하자.

  • 모든 1≤t≤k1\le t\le k에 대해 다음 과정을 반복한다.

    • 칸 A_tA\_t로 이동하고, 빈 문자열 TT를 지정한 뒤, 다음 과정을 반복한다.

      • 현재 위치한 칸에 적힌 문자가 있다면, TT의 맨 뒤에 이어 붙인다.
      • (i,j)(i,j)에 위치한 경우 (i−1,j+1)(i-1,j+1)로 이동한다. 만약 격자를 벗어났다면 종료한다.
    • 문자열 TT를 앞에서부터 읽었을 때 나타나는 연속한 부분문자열 KUMOH의 개수를 XX라 하자.

    • 문자열 TT를 뒤에서부터 읽었을 때 나타나는 연속한 부분문자열 KUMOH의 개수를 YY라 하자.

    • max⁡X,Y\max \\{X, Y\\}가 tt번째 대각선에서 KUMOH의 등장 횟수 B_tB\_t가 된다.

  • B_1+B_2+⋯+B_kB\_1 + B\_2 + \cdots + B\_k가 KUMOH 문자열의 총등장 횟수가 된다.

막상 규칙을 세워 보니, 보경이에게는 모든 대각선을 따라 KUMOH 문자열의 모든 등장 횟수를 직접 세는 것은 너무 어려운 일이었다.

문자열을 꼭 읽고 싶었던 보경이는 코딩을 잘하는 여러분에게 도움을 청했다. 여러분이 대신 KUMOH 문자열이 총 몇 번 등장하는지 구해 주자!

입력

첫째 줄에 문자열의 개수를 나타내는 정수 NN이 주어진다. (1≤N≤1000)(1\le N\le 1000)

둘째 줄부터 NN개의 줄에 걸쳐 문자열 S_iS\_i가 주어진다. (1≤∣S_i∣≤1000)(1\le |S\_i|\le 1000)

각 문자열은 K, U, M, O, H로만 구성된다.

출력

KUMOH 문자열의 총등장 횟수를 출력한다.

예제3

  1. 예제 1

    입력
    6
    KKKKKK
    KUUUUU
    KUMMMM
    KUMOOO
    KUMOHH
    KUMOHH
    
    예상 출력
    0
    
  2. 예제 2

    입력
    6
    KKKKKK
    UUUUUU
    MMMMMM
    OOOOOO
    HHHHHH
    KKKKKK
    
    예상 출력
    2
    
  3. 예제 3

    입력
    7
    KKKKKKK
    UUUUUU
    MMMMM
    K
    OOO
    HHH
    KKKKKKK
    
    예상 출력
    2