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

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

로봇

시간 제한1초메모리 제한128 MB

요약
아래쪽과 오른쪽 이동 최대 k개로 이루어진 프로그램을 무한히 반복하여 장애물을 피하고 보드 밖으로 나가도록 하며 길이가 가장 짧고 길이가 같으면 사전 순으로 가장 앞선 것을 구합니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 수학, 그리디
정답자
아직 제출이 없습니다

문제

한 아이가 선물로 프로그래밍할 수 있는 로봇을 받았다. 이 로봇은 최대 kk개의 이동으로 이루어진 명령 순서 하나를 저장할 수 있다. 전원을 켜면 로봇은 순서에 적힌 이동을 하나씩 차례로 수행한다. 마지막 이동을 마치면 다시 순서의 처음으로 돌아가 전체 순서를 계속 반복한다.

로봇은 n×nn \times n 격자판의 왼쪽 위 칸에 놓인다. 나머지 칸 중 일부에는 로봇이 들어갈 수 없는 장애물이 있다. 로봇이 이 순서를 반복하여 결국 판 밖으로 나가도록 명령 순서를 작성하는 것이 목표다.

이동은 두 가지만 허용된다. 아래로 한 칸 내려가거나 오른쪽으로 한 칸 이동하는 것이다. 순서에서 문자 '1'은 아래로 한 칸, 문자 '0'은 오른쪽으로 한 칸을 뜻한다. 어떤 이동이 판의 아래쪽 끝이나 오른쪽 끝을 벗어나게 하면 그 순간 로봇은 판 밖으로 나간 것이다. 로봇은 장애물이 있는 칸에는 절대 들어가면 안 된다.

입력

첫째 줄에 두 정수 nn과 kk가 주어진다 (1≤n≤10001 \le n \le 1000, 1≤k≤501 \le k \le 50). 여기서 nn은 격자판의 한 변의 길이다.

다음 nn개의 줄에는 각각 nn개의 문자로 이루어진 문자열이 주어지며, 판의 각 행을 나타낸다. 문자 'R'은 로봇의 시작 칸을 뜻하고 항상 왼쪽 위 모서리에 있다. 문자 '.'은 빈 칸을, 문자 'X'는 장애물이 있는 칸을 뜻한다.

로봇이 판 밖으로 나갈 수 있는 길이 kk 이하의 명령 순서가 항상 존재한다고 가정해도 된다.

출력

명령 순서를 한 줄에 출력한다. 순서는 최대 kk개의 문자로 이루어진 문자열이며, '0'은 오른쪽으로 한 칸, '1'은 아래로 한 칸을 뜻한다.

가능한 순서가 여러 개이면 가장 짧은 것을 출력한다. 가장 짧은 순서가 여러 개이면 그중 사전 순으로 가장 앞선 것을 출력한다.

예제3

  1. 예제 1

    입력
    6 4
    R.X...
    X...XX
    XXX...
    X..XX.
    XX.X.X
    ..X...
    
    예상 출력
    010
    
  2. 예제 2

    입력
    1 1
    R
    
    예상 출력
    0
    
  3. 예제 3

    입력
    2 2
    RX
    ..
    
    예상 출력
    1