만드는 중입니다

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

동굴 탐사

면접 대비

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

요약
격자 모양 동굴에서 '@' 위치부터 가장자리 칸까지 가는 최단 경로를 찾아 '*'로 표시합니다. 도달할 수 있는 출구가 없으면 -1을 출력합니다.
난이도

쉬움10점 중 3점

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

문제

스펠레올로지(동굴학)는 상상할 수 있는 학문 중에서도 특히 흥미롭고 모험이 많은 분야인 것은 분명하다. 물론 모험에는 위험도 따른다. 하지만 완전히 안전한 모험이 과연 있을까. 어쨌든 주의를 기울여도 땅속에서는 온갖 예상치 못한 일이 일어날 수 있고, 연구자들은 때때로 동굴에서 최대한 빨리 빠져나와야 한다.

그래서 어떤 출구로든 가는 최단 경로를 찾는 프로그램을 작성해야 한다.

입력

파일의 첫 줄에 동굴 지도의 높이 HH와 너비 WW가 주어진다(1≤H≤1001 \le H \le 100, 1≤W≤1001 \le W \le 100). 다음 HH줄에는 각각 정확히 WW개의 문자가 있다. '.'은 지나갈 수 있는 칸, '#'은 동굴 벽, '@'은 조사팀의 출발 위치를 나타낸다. 1행, HH행, 1열, WW열에 있는 칸이 출구를 나타낸다.

연구자들은 매 걸음마다 같은 행이나 같은 열에 있는, 지나갈 수 있는 인접한 칸으로 이동할 수 있다.

출력

파일의 첫 줄에 동굴에서 빠져나오는 가장 짧은 경로의 길이를 출력한다. 다음 HH줄에는 그 경로를 별표('*')로 표시한 지도를 출력한다. 최단 길이의 경로가 여러 개라면 그중 아무거나 하나를 출력하면 된다. 출구가 없으면 -1을 출력하고, 원래 지도를 그대로 출력한다.

예제1

  1. 예제 1

    입력
    8 10
    ######.###
    #........#
    #.###.####
    #.#...#..#
    #.###.#.##
    #.#......#
    #.#@#.#..#
    #.########
    
    예상 출력
    9
    ######*###
    #....**..#
    #.###*####
    #.#..*#..#
    #.###*#.##
    #.#***...#
    #.#@#.#..#
    #.########