숌 크로스워드

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

요약
주어진 네 단어를 가로 두 개, 세로 두 개로 배치해 서로 정확히 한 번씩 교차하도록 만드는 서로 다른 배열의 개수를 구하는 문제입니다.
난이도

보통10점 중 7점

유형
조합론, 완전 탐색, 시뮬레이션, 문자열
정답자
아직 제출이 없습니다

문제

숌 크로스워드는 검은 칸이 섞인 흔한 크로스워드를 살짝 변형한 퍼즐이다. 영어 단어 4개가 주어질 때, 아래 규칙을 모두 만족하는 배치를 몇 가지나 만들 수 있는지 세는 것이 목표다.

규칙은 다음과 같다.

  1. 네 단어는 각각 정확히 한 번씩 사용한다.
  2. 네 단어 중 두 개는 가로로(왼쪽에서 오른쪽으로) 쓴다.
  3. 나머지 두 개는 세로로(위에서 아래로) 쓴다.
  4. 각 가로 단어는 두 세로 단어 모두와 정확히 한 칸에서 교차해야 한다.
  5. 각 세로 단어는 두 가로 단어 모두와 정확히 한 칸에서 교차해야 한다.
  6. 두 가로 단어는 서로 다른 행에 놓이며, 두 단어 사이에는 가로 단어가 하나도 없는 행이 적어도 한 줄 있어야 한다.
  7. 두 세로 단어는 서로 다른 열에 놓이며, 두 단어 사이에는 세로 단어가 하나도 없는 열이 적어도 한 칸 있어야 한다.

두 배치가 같은지는 다음과 같이 판단한다. 가장 왼쪽 칸의 열을 0, 가장 위쪽 칸의 행을 0으로 두었을 때, 네 단어의 상대적 위치가 모두 같으면 같은 배치로 본다. (회전이나 대칭은 서로 다른 배치로 센다.)

예를 들어 단어가 zaxb, axc, cxd, bxdy이면 아래 두 가지 배치를 만들 수 있다.

zaxb
 x x
 cxd
   y
z
axc
x x
bxdy

입력

네 개의 단어가 한 줄에 하나씩 주어진다. 각 단어의 길이는 3 이상 15 이하이며, 네 단어는 서로 다르다.

출력

만들 수 있는 서로 다른 배치의 수를 한 줄에 출력한다.

예제4

  1. 예제 1

    입력
    zaxb
    axc
    cxd
    bxdy
    
    예상 출력
    2
    
  2. 예제 2

    입력
    coder
    number
    rober
    joker
    
    예상 출력
    0
    
  3. 예제 3

    입력
    lattice
    crossword
    disticnt
    approach
    
    예상 출력
    4
    
  4. 예제 4

    입력
    aaaaaaaaaaaaaaa
    aaaaaaaaaaaaba
    aaaaaaaaaaaaaab
    baaaaaaaaaaaaaa
    
    예상 출력
    10082176