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