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

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

땅따먹기

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

요약
임의의 'A' 칸에서 시작해 매 턴 직사각형 조각을 한 방향으로 늘린 뒤 한 칸 이동하며 'X'를 피할 때, 조각이 포함할 수 있는 모든 칸을 'Y'로 표시한다.
난이도

어려움10점 중 8점

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

문제

각 칸이 'A', 'X', 'O' 중 하나인 N×MN \times M 보드가 주어진다. 플레이어는 'A'인 칸 중 하나에서 시작할 수 있으며, 처음 1×11 \times 1 크기의 말로 시작해 매 턴 다음 행동을 순서대로 수행한다. 매 턴 두 행동을 모두 주어진 순서대로 수행해야 한다.

  1. 상하좌우 중 한 방향으로 말을 길이 1만큼 늘린다. 말을 늘릴 때 기존 말의 위치는 변하지 않고, 해당 방향으로 직사각형 모양으로 크기가 커진다.
  2. 상하좌우 중 한 방향으로 말을 한 칸 이동한다.

예를 들어 가로 길이가 4, 세로 길이가 4인 말을 위쪽으로 길이 1만큼 늘리면 아래 그림과 같이 변한다.

행동을 수행하면서 플레이어의 말이 보드 밖이나 'X'를 포함하게 된다면 그 행동은 수행하지 못하고 종료한다.

플레이어가 원하는 'A'에서 시작해 자유롭게 행동해 0번 이상의 턴을 마친 뒤, 플레이어의 말이 도달하거나 포함할 수 있는 모든 칸을 'Y'로, 나머지 모든 칸을 'N'으로 표시해 출력한다. 만약 행동 1을 수행한 뒤 행동 2에서 'X'를 만난다면 행동 1에서 말이 포함한 칸은 도달하거나 포함한 것으로 취급하지 않는다.

입력

첫째 줄에 N,M (1≤N,M≤50)N, M \, (1 \leq N, M \leq 50)이 주어진다.

이후 NN개의 줄에 걸쳐 MM칸의 정보가 'A', 'X', 'O' 중 하나로 주어진다. 출발 지점 'A'는 적어도 하나 주어진다.

출력

NN줄에 걸쳐 각각 MM칸을 플레이어가 도달하거나 포함할 수 있으면 'Y', 없으면 'N'으로 바꿔 출력한다.

예제1

  1. 예제 1

    입력
    8 8
    OOOAOOXO
    OOXOOOXA
    OOXOOOXX
    XXXOXXXO
    OOXOOOXO
    OOXOOOXO
    OOOOOOXA
    OOOAOOXO
    
    예상 출력
    YYYYYYNN
    NNNYYYNY
    NNNYYYNN
    NNNYNNNY
    YYNYYYNY
    YYNYYYNY
    YYYYYYNY
    YYYYYYNY