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

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

방향판

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

요약
토러스 형태의 N x M 화살표 격자(N,M <= 15)에서 모든 칸이 자기 자신으로 돌아오도록 최소 개수의 화살표를 바꾼다.
난이도

어려움10점 중 8점

유형
그래프, 비트 연산, 동적 계획법, 완전 탐색
정답자
아직 제출이 없습니다

문제

방향판은 화살표로 채워진 행렬이다. 화살표 하나가 칸 하나를 모두 차지하며, 왼쪽, 오른쪽, 위, 아래 중 한 방향을 가리킨다.

칸의 위치는 (행, 열)로 나타내고, 가장 왼쪽 위 칸은 (0, 0)이다.

칸 (r, c)에서 다음에 이동할 칸은 그 칸에 적힌 화살표가 정한다. 왼쪽이면 (r, c-1), 오른쪽이면 (r, c+1), 위쪽이면 (r-1, c), 아래쪽이면 (r+1, c)로 이동한다.

방향판의 모든 행과 열은 순환한다. 그래서 방향판 바깥으로 나가면 반대쪽에서 다시 들어온다. 예를 들어 방향판의 크기가 5 × 5인 경우에 (3, 0)에서 왼쪽으로 한 칸 이동하면 (3, 4)로 돌아오게 된다.

어느 칸에서 출발하든 화살표를 따라 계속 이동하면 언제나 출발한 칸으로 돌아오도록 방향판의 화살표를 바꾸려고 한다. 예를 들어 아래 그림과 같은 경우에 (1, 1), (1, 2), (2, 0), (2, 3)에 적힌 화살표를 바꿔서 항상 시작점으로 돌아오게 방향판을 바꿀 수 있다. 바꿔야 하는 화살표의 최소 개수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 방향판의 행의 개수 N과 열의 개수 M이 주어진다. (1 ≤ N, M ≤ 15)

둘째 줄부터 N개의 줄에 각각 길이 M인 문자열로 방향판의 정보가 주어진다. U는 위, D는 아래, L은 왼쪽, R은 오른쪽을 나타낸다.

출력

주어진 방향판이 문제의 조건을 만족하도록 바꿔야 하는 화살표의 최소 개수를 출력한다.

예제4

  1. 예제 1

    입력
    4 4
    RRRD
    URDD
    UULD
    ULLL
    
    예상 출력
    0
    
  2. 예제 2

    입력
    3 4
    RRRD
    URLL
    LRRR
    
    예상 출력
    2
    
  3. 예제 3

    입력
    3 3
    RRD
    URD
    ULL
    
    예상 출력
    2
    
  4. 예제 4

    입력
    2 6
    ULRLRD
    UDDLRR
    
    예상 출력
    4