Skip to content

Commit cb2ec40

Browse files
committed
[BOJ]#24501. blobaww/골드3/힌트
https://www.acmicpc.net/problem/24501
1 parent bd8def0 commit cb2ec40

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

Hongjoo/백준/blobaww.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import sys
2+
answer =0
3+
N, M = map(int, sys.stdin.readline().split())
4+
board =[[] for _ in range(N)]
5+
# E와 M의 누적합 행렬 정의
6+
e_sum = [[0]*M for _ in range(N)]
7+
m_sum = [[0]*M for _ in range(N)]
8+
9+
for i in range(N):
10+
board[i] = list(sys.stdin.readline()[:-1])
11+
for j in range(M):
12+
if board[i][j] == "E" :
13+
e_sum[i][j] = 1
14+
elif board[i][j] == "M" :
15+
m_sum[i][j] = 1
16+
17+
# 2.E와 M 행렬 누적합 계산하기
18+
# dp[i][j] = dp[i-1][j] + dp[i][j-1] -dp[i-1][j-1 + value[i][j]
19+
for i in range(N):
20+
for j in range(M):
21+
# E의 누적합 계산
22+
# i=0 or j=0 일때 누적합 점화식
23+
if i==0 and j== 0 :
24+
e_sum[0][0] = e_sum[0][0]
25+
elif i== 0 : # 가로형 누적합 계산식 :
26+
e_sum[i][j] = e_sum[0][j-1]+e_sum[0][j]
27+
elif j == 0: # 세로형 누적합 계산식
28+
e_sum[i][j] = e_sum[i][0] + e_sum[i-1][0]
29+
else : # 일반적인 누적합 계산식
30+
e_sum[i][j] = e_sum[i-1][j] + e_sum[i][j-1] - e_sum[i-1][j-1] + e_sum[i][j]
31+
32+
#M의 누적합 계산 : E의 누적합의 역방향(아래로 뒤집기)
33+
# 기준(i,j) : 왼쪽 위쪽 칸
34+
for i in range(N-1, -1 , -1):
35+
for j in range(M-1 , -1 ,-1) :
36+
# i=0 or j=0 일때 누적합 점화식
37+
if i== N-1 and j== M-1 : # 맨 오른쪽 아래 칸의 누적합
38+
m_sum[i][j] = m_sum[i][j]
39+
elif i== N-1 : # 가로형 누적합 계산식 :
40+
m_sum[i][j] = m_sum[i][j+1]+m_sum[i][j]
41+
elif j == M-1 : # 세로형 누적합 계산식
42+
m_sum[i][j] = m_sum[i][j] + m_sum[i+1][j]
43+
else : # 일반적인 누적합 계산식
44+
m_sum[i][j] = m_sum[i+1][j] + m_sum[i][j+1] - m_sum[i+1][j+1] + m_sum[i][j]
45+
46+
#3. S 을 기준으로 총 경우의 수 구하기
47+
# 경우의 수 = E*M
48+
answer = 0
49+
for y in range(N):
50+
for x in range(M):
51+
# S 의 위치 파악하기
52+
if board[y][x] == "S" :
53+
# (y,x) 인 S의 기준에서 E*M 으로 경우의 수 구하기
54+
answer += e_sum[y][x]*m_sum[y][x]
55+
56+
57+
#4. 나머지로 출력하기
58+
print(answer%(10**9+7))

0 commit comments

Comments
 (0)