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

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

중력 뒤집기

면접 대비

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

요약
중력 방향이 두 가지인 격자에서 C에서 D까지 이동할 때 필요한 최소 중력 뒤집기 횟수를 구한다. 아래가 막혀 있을 때만 옆으로 이동할 수 있고, 비어 있으면 반드시 떨어진다.
난이도

보통10점 중 7점

유형
BFS, 그래프, 최단 경로, 시뮬레이션
정답자
아직 제출이 없습니다

문제

보비디안 선장은 동료인 비팔로 박사를 구하기 위해 모험을 떠났습니다. 이 세계는 선장이 사는 세상을 옆에서 바라본 N×MN \times M 크기의 2차원 격자(1≤N,M≤5001 \le N, M \le 500)로 나타냅니다. 격자의 각 칸은 비어 있거나, 막혀 있어 지나갈 수 없습니다.

보비디안 선장은 점프할 수 없으며, 세계를 이동하는 동안 다음과 같은 물리 법칙을 반드시 따라야 합니다.

  1. 선장의 바로 아래에 칸이 없다면(즉, 중력 방향으로 격자의 끝에 있다면) 선장은 우주 밖으로 날아가 임무에 실패합니다.
  2. 선장의 바로 아래 칸이 비어 있다면 선장은 그 칸으로 떨어집니다.
  3. 그 외의 경우(바로 아래 칸이 막혀 있는 경우) 선장은 다음 중 하나를 할 수 있습니다. a. 해당 칸이 존재하고 비어 있다면 왼쪽 또는 오른쪽으로 한 칸 이동합니다. b. 또는 중력의 방향을 뒤집습니다.

선장이 중력의 방향을 뒤집으면, 규칙 1과 2에서 말하는 "아래"의 의미가 행 번호가 11 큰 칸과 11 작은 칸 사이에서 서로 바뀝니다. 첫 번째 행의 번호는 11이고 마지막 행의 번호는 NN입니다. 처음에는 행 번호가 11 큰 칸이 선장의 "아래" 칸입니다.

비팔로 박사는 이 세계 어딘가에 갇혀 있습니다. 중력을 뒤집는 횟수를 최소로 하여 선장이 박사가 있는 칸에 도달하도록 도와주세요. 박사에게 도달할 수 없다면 −1-1을 출력합니다.

입력

  • 첫째 줄: 공백으로 구분된 두 정수 NN과 MM.
  • 둘째 줄부터 N+1N+1번째 줄까지: i+1i+1번째 줄은 선장 세계의 ii번째 행을 나타냅니다. .은 빈 칸, #은 막힌 칸, C는 보비디안 선장의 시작 칸, D는 비팔로 박사가 있는 칸을 뜻합니다. C와 D는 각각 정확히 하나씩 있으며, 둘 다 빈 칸 위에 있습니다.

출력

  • 첫째 줄: 보비디안 선장이 비팔로 박사에게 도달하기 위해 중력을 뒤집어야 하는 최소 횟수를 출력합니다. 도달할 수 없다면 −1-1을 출력합니다.

힌트

예시 설명

보비디안 선장은 (4,2)(4, 2)(4행 2열)에서 시작합니다. 중력을 뒤집어 (2,2)(2, 2)로 떨어진 뒤, 오른쪽으로 두 번 이동해 (2,4)(2, 4)에 도착합니다. 다시 중력을 뒤집어 (4,4)(4, 4)로 떨어진 뒤, 오른쪽으로 한 번 이동해 (4,5)(4, 5)로 갑니다. 마지막으로 중력을 한 번 더 뒤집어 (3,5)(3, 5)에 있는 비팔로 박사에게로 떨어집니다. 중력을 뒤집은 횟수는 모두 세 번입니다.

예제3

  1. 예제 1

    입력
    5 5
    #####
    #...#
    #...D
    #C...
    ##.##
    
    예상 출력
    3
    
  2. 예제 2

    입력
    3 3
    ...
    C.D
    ###
    
    예상 출력
    0
    
  3. 예제 3

    입력
    4 3
    #C#
    #.#
    #D#
    ###
    
    예상 출력
    0