뭔가 줄일수 있을 것 같긴한데 일단 통과.
3차원 배열은 뭔가 3차원값들에 대해 늘 초기화해줘야 한다는게 좀 짜증난다.
얕은복사라 그런가 자꾸 초깃값을 가져와서 새로 덮어씌우는 바람에 아직 설계가 손에 익지 않는다.
오늘 좀 더 설계에 대해 연습해 볼 것.
3차원 배열 내 값의 수정과 반복문에 대해서.
import sys
input = sys.stdin.readline
# 세로 M 가로 M
M,N = map(int,input().split())
K = int(input())
maps = [list(input().rstrip()) for _ in range(M)]
dp = [[[0,0,0] for _ in range(N)] for _ in range(M)]
# 정글 J 바다 O 얼음 I
for i in range(M):
for j in range(N):
if i and j:
for k in range(3):
dp[i][j][k] = dp[i][j-1][k]+dp[i-1][j][k]-dp[i-1][j-1][k]
if maps[i][j] =='J':
dp[i][j][0] += 1
elif maps[i][j] =='O':
dp[i][j][1] += 1
elif maps[i][j] == 'I':
dp[i][j][2] += 1
elif not i and j:
for k in range(3):
dp[i][j][k] = dp[i][j-1][k]
if maps[i][j] =='J':
dp[i][j][0] += 1
elif maps[i][j] =='O':
dp[i][j][1] += 1
elif maps[i][j] == 'I':
dp[i][j][2] += 1
elif i and not j:
for k in range(3):
dp[i][j][k] = dp[i-1][j][k]
if maps[i][j] =='J':
dp[i][j][0] +=1
elif maps[i][j] =='O':
dp[i][j][1] +=1
elif maps[i][j] == 'I':
dp[i][j][2] +=1
elif not i and not j:
if maps[i][j] =='J':
dp[i][j][0]=1
elif maps[i][j] =='O':
dp[i][j][1]=1
elif maps[i][j] == 'I':
dp[i][j][2]=1
# 출력범위 조절.
for _ in range(K):
x1,y1,x2,y2 = map(int,input().split())
answer = []
if x1 !=1 and y1 != 1:
for k in range(3):
answer.append(dp[x2-1][y2-1][k] - dp[x1-2][y2-1][k] - dp[x2-1][y1-2][k] + dp[x1-2][y1-2][k])
elif x1 !=1 and y1==1:
for k in range(3):
answer.append(dp[x2-1][y2-1][k] - dp[x1-2][y2-1][k])
elif x1 ==1 and y1!=1:
for k in range(3):
answer.append(dp[x2-1][y2-1][k] - dp[x2-1][y1-2][k])
elif x1==1 and y1==1:
for k in range(3):
answer.append(dp[x2-1][y2-1][k])
print(*answer)
'practivceAlgorithm > 백준' 카테고리의 다른 글
[백준][Python] 2613 숫자구슬 (0) | 2021.07.26 |
---|---|
[백준][Python] 20007 떡돌리기 (0) | 2021.07.26 |
[백준][Python] 1018 체스판 다시 칠하기 (0) | 2021.07.26 |
[백준][Python] 10597 순열장난 : 분기가 있는 DFS (0) | 2021.07.25 |
[백준][Python] 12865 평범한 배낭 (0) | 2021.07.25 |