728x90
N,M = map(int,input().split())
baskets = []
for i in range(N):
baskets.append(list(map(int,input().split())))
# clouds = [[0 for _ in range(N)] for _ in range(N)]
# clouds[N-1][0], clouds[N-1][1], clouds[N-2][0],clouds[N-2][1] = 1,1,1,1
clouds = [[N-1,0],[N-1,1],[N-2,0],[N-2,1]]
dx = [0,-1,-1,-1,0,1,1,1]
dy = [-1,-1,0,1,1,1,0,-1]
for _ in range(M):
d,s = map(int, input().split())
# print(clouds)
# for basket in baskets:
# print(basket)
# print("===================")
# print()
rainPos = [] #비 내린 구름 위치 확인
rainIn = {}
for i in range(len(clouds)):
#구름 이동
cloudX = (clouds[i][0] + dx[d-1]*s)%N
cloudY = (clouds[i][1] + dy[d-1]*s)%N
#구름에서 비 내리기
baskets[cloudX][cloudY] += 1
#구름 위치 저장
rainPos.append([cloudX,cloudY])
rainIn[(cloudX,cloudY)]=1
# 비내린곳 물복사
for rain in rainPos:
for j in range(1, 8, 2):
posX = rain[0] + dx[j]
posY = rain[1] + dy[j]
if posX < 0 or posX >= N or posY < 0 or posY >= N:
continue
else:
if baskets[posX][posY] > 0:
baskets[rain[0]][rain[1]] += 1
newCloud=[]
for j in range(N):
for k in range(N):
if baskets[j][k] >= 2 and (j,k) not in rainIn:
baskets[j][k] -= 2
newCloud.append([j,k])
clouds = newCloud
sum = 0
for basket in baskets:
for i in basket:
sum += i
print(sum)
단순 구현이라 시간복잡도를 고려하지 않아도 됐다. 그래도 시간초과가 나왔는데 not in을 사용하는 부분에서 list를 사용하다보니 생긴 문제였음.
사전에 꼼꼼히 설계하고 풀면 문제점을 빠르게 찾을 수 있음
728x90
'IT 일기 > 코테' 카테고리의 다른 글
17070 / 파이프 옮기기 1 파이썬 (0) | 2023.04.07 |
---|---|
16637번 / 괄호 추가하기 - 파이썬 (0) | 2023.04.06 |
배열 돌리기 4 - 파이썬 (0) | 2023.04.06 |
n*n 2차원 배열 달팽이 알고리즘 - 파이썬 (0) | 2023.04.05 |
임의의 요소의 값보다 요소의 값이 다 작은 경우가 한번이라도 있다면? (0) | 2023.03.27 |