아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

구슬 탈출 4

면접 대비

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

요약
빨간 구슬과 파란 구슬, 구멍 하나가 있는 작은 보드에서 판을 기울여 파란 구슬은 빠지지 않으면서 빨간 구슬만 구멍으로 떨어뜨리는 최소 기울임 횟수를 구하고, 불가능하면 -1을 출력한다.
난이도

보통10점 중 7점

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

문제

직사각형 보드에 빨간 구슬과 파란 구슬을 하나씩 넣은 다음, 빨간 구슬을 구멍으로 빼내는 게임이 있다.

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

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

각각의 동작에서 두 구슬은 동시에 움직인다. 빨간 구슬이 구멍에 빠지면 성공이지만, 파란 구슬이 구멍에 빠지면 실패다. 빨간 구슬과 파란 구슬이 동시에 구멍에 빠져도 실패다. 빨간 구슬과 파란 구슬은 같은 칸에 함께 있을 수 없고, 각각 한 칸을 모두 차지한다. 한 번 기울이면 구슬이 더 이상 움직이지 않을 때까지 굴러간다.

보드의 상태가 주어졌을 때, 최소 몇 번 만에 빨간 구슬을 구멍으로 빼낼 수 있는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 보드의 세로 크기와 가로 크기를 뜻하는 두 정수 NN, MM이 주어진다. (3≤N,M≤103 \le N, M \le 10)

다음 NN개 줄에 보드의 모양을 나타내는 길이 MM의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B'로 이루어져 있다. '.'은 빈 칸을 뜻하고, '#'은 구슬이 지나갈 수 없는 장애물이나 벽을 뜻하며, 'O'는 구멍의 위치를 뜻한다. 'R'은 빨간 구슬의 위치, 'B'는 파란 구슬의 위치다.

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

출력

빨간 구슬을 구멍으로 빼내는 데 필요한 최소 기울이기 횟수를 출력한다. 어떻게 움직여도 빨간 구슬을 구멍으로 빼낼 수 없으면 -1을 출력한다.

예제5

  1. 예제 1

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

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

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

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

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