https://www.acmicpc.net/problem/16946
Baekjoon Online JudgeBaekjoon Online Judgewww.acmicpc.netfrom collections import deque
def dfs(x, y, idx):
q = deque()
q.append((x, y))
graph[x][y] = idx
cnt_block = 0 #벽돌의 갯수
while q:
a, b = q.popleft()
cnt_block += 1
for i in range(4):
na, nb = a + dx[i], b + dy[i]
if 0 <= na < N and 0 <= nb < M and graph[na][nb] == 0:
graph[na][nb] = idx
q.append((na, nb))
return cnt_block
dx, dy = [0, 0, 1, -1], [1, -1, 0, 0]
N, M = map(int, input().split())
result = [0] * (N * M) # [idx에서 idx개수]
graph = []
for _ in range(N):
graph.append(list(map(int, input().strip())))
result2 = [[0] * M for _ in range(N)] #결과 graph
idx=1
for i in range(N):
for j in range(M):
if graph[i][j] == 0: #방문안햇을경우?
idx += 1
result[idx] = dfs(i, j, idx) #몇개있는지 조지고 [i,j]를 idx
for i in range(N):
for j in range(M):
if graph[i][j] == 1:
count = 1
check = [0] * (N * M)
for z in range(4):
na, nb = i + dx[z], j + dy[z]
if 0 <= na < N and 0 <= nb < M:
if graph[na][nb] != 0 and check[graph[na][nb]]==0:
check[graph[na][nb]]=1
count += result[graph[na][nb]]
result2[i][j] = count % 10
for i in range(N):
a = "".join(map(str, result2[i]))
print(a)
check=[0]*(N*M)에서 시간을 너무 많이 먹어서 안돌아가는듯. 1000*1000에서 1로만 꽉 채웠다고 하면 1000*1000짜리 배열을 1000*1000번 생성하네요
아 그게 초과 날줄은 몰랏네요..일단수정해보겟습니다 의견감사해요
메모리초과도 아니고 단순배열생성이 시간초과를 그렇게 잡아먹음? - dc App
파이썬에서 구체적으로 얼마나 걸리는지 딱 집어말하진 못하겠지만 저거 바꾸니까 돌아가던데요
100만개짜리 객체가 들어있는 리스트를 100만번 생성한다고 생각해 봐 - dc App