문제 분류 수업 진도 대회 채점현황 순위 질문게시판
게임
스도쿠 타이핑 리듬 타자게임 타이핑 테트리스 타이핑 인베이더 타이핑 지뢰찾기 8192 공룡게임 타이핑 플래피버드 랭킹
로그인

8033 : 격자 경로 DP

•시간제한: 2.000 S •메모리제한: 256 MB •제출: 0 •통과: 0 •만든사람: suakii

8033 : 격자 경로 DP

시간 2.000s · 메모리 256MB · 제출 0 · 정답 0

문제 설명

$N \times N$ 크기의 격자가 주어집니다. 격자의 각 칸은 비어 있거나(.) 장애물(*)이 있습니다. 좌측 상단 $(1,1)$ 칸에서 출발하여 우측 하단 $(N,N)$ 칸까지 도달하고자 합니다. 오직 아래와 오른쪽 방향으로만 이동이 가능하고 장애물이 있는 칸은 지나갈 수 없다고 할 때, 가능한 서로 다른 경로의 개수를 구하는 프로그램을 작성하시오.



[제약 조건]
• $1 \le N \le 1{,}000$
• 격자의 각 칸은 빈칸(.) 또는 장애물(*)입니다.

입력 설명

첫째 줄에 격자의 크기 $N$이 주어집니다. ($1 \le N \le 1000$)
다음 $N$개의 줄에 걸쳐 격자의 상태가 각 줄마다 $N$개의 문자로 주어집니다.

출력 설명

도달 가능한 경로의 개수를 $10^9+7$로 나눈 나머지를 출력합니다.

입력 예시
COPY
복사되었습니다!

4
....
.*..
...*
*...

출력 예시
COPY
복사되었습니다!

3

도움

격자 상에서 $(i,j)$ 칸까지 도달하는 경로의 수 $dp[i][j]$는 위쪽 칸에서 내려오는 경우와 왼쪽 칸에서 오른쪽으로 오는 경우의 합입니다. 즉, 격자가 비어 있을 때 $dp[i][j] = (dp[i-1][j] + dp[i][j-1]) \pmod{10^9+7}$ 이며, 격자가 장애물(*)인 경우 $dp[i][j] = 0$ 입니다. 초기값 $dp[1][1] = 1$ (단, 시작칸이 비어있는 경우)로 시작하여 이중 루프를 통해 $O(N^2)$ 시간에 해결할 수 있습니다.

출처/분류

NOTICE  —  BFStudy OJ 정보샘
애들아, 문제 많이 풀고 게임 잠깐 하는거지?
— 정보샘