레이저 타워

방향을 가진 레이저 타워와 적이 있는 격자에서 서로 겹치지 않도록 발사할 타워와 목표 칸을 정해 제거할 수 있는 적의 최댓값을 구한다.

어려움8그리디완전 탐색구현행렬면접 대비아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

현정이는 직사각형 보드 위에서 진행되는 전략 게임을 하고 있다. 보드는 단위 정사각형 칸으로 나뉘어 있고, 일부 칸은 적이 차지하고 있다. 지금은 현정이의 차례이고, 적을 최대한 많이 제거하려고 한다.

적이 없는 칸 가운데 일부에는 현정이의 레이저 타워가 있다. 각 타워는 북, 남, 서, 동 가운데 한 방향을 바라본다. 타워가 매우 높아서 바라보는 방향에 놓인 모든 칸을 공격할 수 있다.

현정이는 타워마다 레이저를 쏠지 말지 정하고, 쏘기로 한 타워는 바라보는 방향에 있는 칸 하나를 목표로 고른다. 쏘기로 한 타워는 모두 동시에 발사하며, 목표로 삼은 칸에 있는 적은 모두 제거된다. 레이저가 지나가기만 한 칸의 적은 제거되지 않는다.

배치와 발사에는 다음 규칙이 있다.

  • 어떤 타워도 다른 타워를 공격할 수 없도록 놓여 있다. 즉 타워가 바라보는 방향에는 다른 타워가 없다.
  • 발사된 레이저는 타워가 있는 칸에서 목표 칸까지 직선으로 지나간다. 두 레이저는 칸을 하나도 함께 쓸 수 없고, 목표 칸이 다른 레이저가 지나가는 칸이 되어도 안 된다. 즉 한 칸을 공격하거나 지나가는 레이저는 많아야 하나이다.

보드의 상태가 주어질 때, 제거할 수 있는 적의 최대 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 보드의 세로 크기 NN과 가로 크기 MM이 주어진다. (1N,M501 \le N, M \le 50)

둘째 줄부터 NN개 줄에 보드의 상태가 한 줄에 MM개의 문자로 주어진다. 각 문자의 뜻은 다음과 같다.

  • .: 빈 칸
  • 1부터 9까지: 그 칸에 있는 적의 수
  • A, V, <, >: 각각 북, 남, 서, 동을 바라보는 레이저 타워

출력

첫째 줄에 제거할 수 있는 적의 최대 수를 출력한다.