만드는 중입니다

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

물류 센터

면접 대비

시간 제한4초메모리 제한2048 MB

요약
벽, 빈 칸, 목적지가 적힌 격자에서 상자를 목적지까지 밀어 보낼 수 없는 칸을 X로, 나머지 칸을 O로 표시합니다.
난이도

보통10점 중 4점

유형
BFS, 행렬, 그래프
정답자
아직 제출이 없습니다

문제

Sokoban은 이 도시에서 가장 큰 물류 센터의 최고 직원이다. 그는 단순하지만 체력을 많이 쓰는 이 일을 좋아한다. 매일 상자를 가능한 목적지까지 밀어 두면, 그곳에서 상자를 트럭에 싣는다. 그러나 젊은 시절은 지났고, 육체노동의 부담이 느껴지기 시작했다. 그래서 상자를 최적으로 옮기도록 돕는 알고리즘, 즉 Fast Pushing Crates(FPC) 알고리즘을 만들었다. 이 알고리즘을 완성하려면 당신의 도움이 필요하다.

그의 알고리즘은 물류 센터의 배치를 격자로 입력받아, 상자를 효율적으로 미는 데 필요한 이동 순서를 반환한다. 알고리즘에서는 격자 안의 데드 스퀘어를 찾아야 한다. 어떤 칸이 벽이거나, Sokoban이 어느 위치로든 순간이동할 수 있다고 가정해도 그 칸에서 상자를 어떤 목적지로도 옮길 수 없다면, 그 칸을 데드 스퀘어라고 한다.

물류 센터의 배치가 주어졌을 때 데드 스퀘어를 찾아라.

입력

첫 줄에 두 정수 rr과 cc(1≤r,c≤1031\leq r,c\leq 10^3)가 주어진다. 격자의 행 수와 열 수이다.

이어지는 rr개의 줄에는 각각 cc개의 문자가 주어진다.

  • \#은 벽이다. 격자는 벽으로 둘러싸여 있다고 보장된다.
  • D는 목적지이다. 0개를 포함해 몇 개든 있을 수 있다.
  • .은 빈 칸이다.

출력

rr개의 줄을 출력한다. 각 줄은 cc개의 문자로 이루어진다. jj번째 줄의 ii번째 문자는 다음과 같다.

  • 위치 (i,j)(i,j)의 칸이 데드 스퀘어이면 X.
  • 그렇지 않으면 O.

예제2

  1. 예제 1

    입력
    7 7
    #######
    #.....#
    #.....#
    #..D..#
    #.....#
    #.....#
    #######
    
    예상 출력
    XXXXXXX
    XXXXXXX
    XXOOOXX
    XXOOOXX
    XXOOOXX
    XXXXXXX
    XXXXXXX
    
  2. 예제 2

    입력
    8 8
    ########
    #..#D###
    #..#.###
    #..#.###
    #..#...#
    #..#.###
    #D.#.###
    ########
    
    예상 출력
    XXXXXXXX
    XXXXOXXX
    XOXXOXXX
    XOXXOXXX
    XOXXOOXX
    XOXXOXXX
    XOXXXXXX
    XXXXXXXX