슬리퍼

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

요약
각 칸에 왼발/오른발 슬리퍼가 네 방향 중 하나를 향해 놓인 n×m 격자에서 인접한 두 슬리퍼를 서로 반대 방향으로 90도 돌리는 연산만 사용해, 자연스러운 위치를 이룬 슬리퍼 쌍의 최대 개수를 구한다.
난이도

보통10점 중 7점

유형
그래프, 수학, 그리디, 구현
정답자
아직 제출이 없습니다

문제

“먼저 일어난 사람이 슬리퍼를 신는다”는 러시아 속담이 있다. 하지만 우리 캠퍼스에서는 그렇게 간단하지 않다. 일찍 오는 것뿐만 아니라 (그렇지 않으면 슬리퍼는 이미 다 나가고 없다) 신발장의 엄격한 규칙도 따라야 한다.

신발장은 n × m 격자 모양이다. 각 칸에는 왼쪽 또는 오른쪽 슬리퍼가 하나씩 들어 있다. 처음에 각 슬리퍼는 왼쪽, 오른쪽, 앞, 뒤 네 방향 중 하나를 향하고 있다. 인접한 슬리퍼 두 개를 (서로 같아도 무방하다) 골라 하나는 시계 방향으로 90도, 다른 하나는 반시계 방향으로 90도 회전시킬 수 있다. 자연스러운 자세의 슬리퍼 한 쌍을 찾으면, 그것을 신고 행복하고 따뜻하게 떠날 수 있다.

슬리퍼 한 쌍이 자연스러운 자세라는 것은 다음과 같다:

  • 두 슬리퍼의 칸이 한 변을 공유한다;
  • 두 슬리퍼가 같은 방향을 향한다;
  • 그 방향을 따라 두 칸을 바라볼 때, 한 칸이 오른쪽에 있고 다른 칸이 왼쪽에 있다. 그리고 오른쪽 칸에는 오른쪽 슬리퍼가, 왼쪽 칸에는 왼쪽 슬리퍼가 있다.

쉽게 말해, 평범한 사람이 이 슬리퍼 한 쌍에 자연스럽게 발을 넣을 수 있다는 뜻이다. 예시는 “힌트” 절을 참고하라.

모두가 이타적이어서 최적으로 행동한다고 가정할 때, 슬리퍼를 신고 떠날 수 있는 사람의 최대 수를 구하라.

입력

입력의 첫 줄에는 격자의 크기 n과 m (1 ≤ n, m ≤ 100)이 주어진다. 다음 n개의 줄에는 각각 m개의 공백으로 구분된 문자열이 주어지며, 해당 칸의 슬리퍼를 나타낸다. 각 슬리퍼는 길이 2의 문자열로 표현된다. 첫 번째 문자는 “L” 또는 “R”이며 각각 왼쪽, 오른쪽 슬리퍼를 뜻한다. 두 번째 문자는 “<”, “>”, “^”, “v” 중 하나이며, 슬리퍼가 처음에 왼쪽, 오른쪽, 앞, 뒤를 향함을 뜻한다.

출력

슬리퍼 한 쌍을 만들 수 있는 최대 개수를 정수 하나로 출력한다.

힌트

첫 번째 예시를 보자. 먼저 왼쪽 슬리퍼 두 개를 회전시킨다: 위쪽은 반시계 방향, 아래쪽은 시계 방향. 다음으로 위쪽 슬리퍼 두 개를 회전시킨다: 왼쪽은 반시계 방향, 오른쪽은 시계 방향. 그러면 자연스러운 자세의 슬리퍼 한 쌍이 두 개 생긴다: 위쪽 행에 하나, 아래쪽 행에 하나.

R^ L>    R< L>    Rv Lv
L< R^    L^ R^    L^ R^

이 예시에서 다른 최종 그림에 이르는 또 다른 가능한 행동 순서는 다음과 같다.

R^ L>    R< Lv    R< L>
L< R^    L< R^    L< R>

예제2

  1. 예제 1

    입력
    2 2
    R^ L>
    L< R^
    
    예상 출력
    2
    
  2. 예제 2

    입력
    3 2
    L^ R^
    R< L<
    L< R>
    
    예상 출력
    2