만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

구슬 탈출

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

요약
보드에 빨간 구슬, 파란 구슬, 구멍이 하나씩 있고 보드를 기울이면 두 구슬이 동시에 굴러가며, 파란 구슬이 빠지지 않으면서 빨간 구슬을 10번 이하의 기울임으로 구멍에 넣을 수 있는지 판정하는 문제다.
난이도

보통10점 중 7점

유형
BFS, 시뮬레이션, 구현
정답자
아직 제출이 없습니다

문제

직사각형 보드에 빨간 구슬과 파란 구슬을 하나씩 넣고, 빨간 구슬만 구멍으로 빼내는 퍼즐이 있다.

보드의 세로 크기는 NN, 가로 크기는 MM이고 1×11 \times 1 크기의 칸으로 나뉘어 있다. 가장 바깥 행과 열은 모두 막혀 있으며, 보드에는 구멍이 하나 있다. 두 구슬은 각각 1×11 \times 1 칸을 가득 채우는 크기이고 하나씩 놓여 있다. 목표는 빨간 구슬을 구멍으로 빼내는 것이다. 이때 파란 구슬은 구멍에 들어가면 안 된다.

구슬을 손으로 건드릴 수는 없고, 보드를 기울여 중력으로 굴려야 한다. 왼쪽으로 기울이기, 오른쪽으로 기울이기, 위쪽으로 기울이기, 아래쪽으로 기울이기의 네 가지 동작이 가능하다.

한 번 기울이면 두 구슬이 동시에 움직인다. 한 번의 기울이기는 구슬이 더 이상 움직이지 않을 때까지 이어진다. 빨간 구슬이 구멍에 빠지면 성공이고, 파란 구슬이 구멍에 빠지면 실패다. 두 구슬이 한 번의 기울이기로 함께 구멍에 빠져도 실패다.

두 구슬은 같은 칸에 함께 있을 수 없고, 각각 한 칸을 모두 차지한다. 한 방향으로 기울였을 때 두 구슬이 같은 칸에서 멈추게 되면, 그 기울이기에서 더 많이 움직인 구슬이 한 칸 뒤로 물러나 앞의 구슬 바로 뒤에 멈춘다.

보드의 상태가 주어졌을 때, 10번 이하로 기울여 빨간 구슬을 빼낼 수 있는지 판정하는 프로그램을 작성하시오.

입력

첫째 줄에 보드의 세로 크기와 가로 크기를 뜻하는 두 정수 NN, MM (3≤N,M≤103 \le N, M \le 10)이 주어진다. 다음 NN개 줄에는 보드의 모양을 나타내는 길이 MM의 문자열이 주어진다. 이 문자열은 ., #, O, R, B로 이루어진다. .은 빈 칸, #은 구슬이 지나갈 수 없는 장애물이나 벽, O는 구멍의 위치, R은 빨간 구슬의 위치, B는 파란 구슬의 위치다.

주어지는 보드의 가장자리는 모두 #이다. 구멍은 한 개이고, 빨간 구슬과 파란 구슬도 각각 한 개씩 주어진다.

출력

파란 구슬을 구멍에 넣지 않으면서 10번 이하로 기울여 빨간 구슬을 빼낼 수 있으면 1, 그렇지 않으면 0을 출력한다.

예제7

  1. 예제 1

    입력
    5 5
    #####
    #..B#
    #.#.#
    #RO.#
    #####
    
    예상 출력
    1
    
  2. 예제 2

    입력
    7 7
    #######
    #...RB#
    #.#####
    #.....#
    #####.#
    #O....#
    #######
    
    예상 출력
    1
    
  3. 예제 3

    입력
    7 7
    #######
    #..R#B#
    #.#####
    #.....#
    #####.#
    #O....#
    #######
    
    예상 출력
    1
    
  4. 예제 4

    입력
    10 10
    ##########
    #R#...##B#
    #...#.##.#
    #####.##.#
    #......#.#
    #.######.#
    #.#....#.#
    #.#.#.#..#
    #...#.O#.#
    ##########
    
    예상 출력
    0
    
  5. 예제 5

    입력
    3 7
    #######
    #R.O.B#
    #######
    
    예상 출력
    1
    
  6. 예제 6

    입력
    10 10
    ##########
    #R#...##B#
    #...#.##.#
    #####.##.#
    #......#.#
    #.######.#
    #.#....#.#
    #.#.##...#
    #O..#....#
    ##########
    
    예상 출력
    1
    
  7. 예제 7

    입력
    3 10
    ##########
    #.O....RB#
    ##########
    
    예상 출력
    0