보드에 빨간 구슬, 파란 구슬, 구멍이 하나씩 있고 보드를 기울이면 두 구슬이 동시에 굴러가며, 파란 구슬이 빠지지 않으면서 빨간 구슬을 10번 이하의 기울임으로 구멍에 넣을 수 있는지 판정하는 문제다.
보통7BFS시뮬레이션구현아직 제출이 없습니다시간 제한2초메모리 제한512 MB직사각형 보드에 빨간 구슬과 파란 구슬을 하나씩 넣고, 빨간 구슬만 구멍으로 빼내는 퍼즐이 있다.
보드의 세로 크기는 N, 가로 크기는 M이고 1×1 크기의 칸으로 나뉘어 있다. 가장 바깥 행과 열은 모두 막혀 있으며, 보드에는 구멍이 하나 있다. 두 구슬은 각각 1×1 칸을 가득 채우는 크기이고 하나씩 놓여 있다. 목표는 빨간 구슬을 구멍으로 빼내는 것이다. 이때 파란 구슬은 구멍에 들어가면 안 된다.
구슬을 손으로 건드릴 수는 없고, 보드를 기울여 중력으로 굴려야 한다. 왼쪽으로 기울이기, 오른쪽으로 기울이기, 위쪽으로 기울이기, 아래쪽으로 기울이기의 네 가지 동작이 가능하다.
한 번 기울이면 두 구슬이 동시에 움직인다. 한 번의 기울이기는 구슬이 더 이상 움직이지 않을 때까지 이어진다. 빨간 구슬이 구멍에 빠지면 성공이고, 파란 구슬이 구멍에 빠지면 실패다. 두 구슬이 한 번의 기울이기로 함께 구멍에 빠져도 실패다.
두 구슬은 같은 칸에 함께 있을 수 없고, 각각 한 칸을 모두 차지한다. 한 방향으로 기울였을 때 두 구슬이 같은 칸에서 멈추게 되면, 그 기울이기에서 더 많이 움직인 구슬이 한 칸 뒤로 물러나 앞의 구슬 바로 뒤에 멈춘다.
보드의 상태가 주어졌을 때, 10번 이하로 기울여 빨간 구슬을 빼낼 수 있는지 판정하는 프로그램을 작성하시오.
첫째 줄에 보드의 세로 크기와 가로 크기를 뜻하는 두 정수 N, M (3≤N,M≤10)이 주어진다. 다음 N개 줄에는 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 ., #, O, R, B로 이루어진다. .은 빈 칸, #은 구슬이 지나갈 수 없는 장애물이나 벽, O는 구멍의 위치, R은 빨간 구슬의 위치, B는 파란 구슬의 위치다.
주어지는 보드의 가장자리는 모두 #이다. 구멍은 한 개이고, 빨간 구슬과 파란 구슬도 각각 한 개씩 주어진다.
파란 구슬을 구멍에 넣지 않으면서 10번 이하로 기울여 빨간 구슬을 빼낼 수 있으면 1, 그렇지 않으면 0을 출력한다.