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

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

격자 위의 로봇

면접 대비

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

요약
장애물이 있는 n x n 격자에서 왼쪽 위에서 오른쪽 아래로 오른쪽과 아래로만 이동하는 경로의 수를 2^31-1로 나눈 나머지로 세고, 경로가 없을 때 위와 왼쪽 이동까지 허용하면 도달할 수 있는지 판별한다.
난이도

보통10점 중 5점

유형
동적 계획법, DFS, 행렬, 구현
정답자
아직 제출이 없습니다

문제

격자의 왼쪽 위 칸에서 오른쪽 아래 칸까지 스스로 길을 찾아가는 로봇을 만들었다. 하지만 로봇에는 아주 단순한 논리만 들어 있어서 오른쪽과 아래쪽으로만 이동할 수 있다(어차피 목표가 그 방향에 있다).

장애물이 놓인 격자 위에 로봇을 올려놓고 지켜보다가, 로봇이 자꾸 막히는 모습에 지쳐 이런 질문이 떠올랐다. 출발점에서 도착점까지 가는 서로 다른 경로는 몇 개일까? 그리고 만약 하나도 없다면, 위쪽과 왼쪽으로도 움직일 수 있었다면 도착점에 닿을 수 있었을까?

이제 다음을 계산하는 프로그램을 작성하자. 로봇이 지나갈 수 없는 장애물이 표시된 n×nn \times n 격자가 주어질 때, 왼쪽 위 칸 ss에서 오른쪽 아래 칸 tt까지 오른쪽과 아래쪽으로만 이동하는 서로 다른 경로의 수를 센다. 경로의 수가 매우 커질 수 있으므로 답은 231−12^{31} - 1로 나눈 나머지로 출력한다. 그런 경로가 하나도 없다면, 위쪽과 왼쪽 이동까지 허용했을 때 도착점에 닿을 수 있는지 판정한다.

입력

첫째 줄에 정수 nn이 주어진다(1≤n≤10001 \le n \le 1000).

다음 nn개의 줄에는 각각 nn개의 문자가 주어진다. 각 문자는 .(지나갈 수 있는 칸) 또는 #(지나갈 수 없는 칸)이다. 출발 칸 ss(왼쪽 위)와 도착 칸 tt(오른쪽 아래)에는 절대 장애물이 놓이지 않는다.

출력

한 줄을 출력한다.

  • 오른쪽과 아래쪽 이동만으로 ss에서 tt까지 가는 서로 다른 경로의 수를 231−12^{31} - 1로 나눈 나머지, 또는
  • 오른쪽·아래쪽만으로는 갈 수 없지만 위쪽·왼쪽 이동까지 허용하면 갈 수 있는 경우 THE GAME IS A LIE, 또는
  • ss에서 tt로 가는 경로가 전혀 없는 경우 INCONCEIVABLE.

예제4

  1. 예제 1

    입력
    5
    .....
    #..#.
    #..#.
    ...#.
    .....
    
    예상 출력
    6
    
  2. 예제 2

    입력
    7
    ......#
    ####...
    .#.....
    .#...#.
    .#.....
    .#..###
    .#.....
    
    예상 출력
    THE GAME IS A LIE
    
  3. 예제 3

    입력
    1
    .
    
    예상 출력
    1
    
  4. 예제 4

    입력
    2
    ..
    ..
    
    예상 출력
    2