백준 16235 나무 제태크

wook2·2021년 7월 27일
0

알고리즘

목록 보기
43/117

구현문제이다.
문제 설명이 길어서 문제 이해하는데 시간이 좀 걸렸다.
크게 봄/여름/가을/겨울로 나뉠 수 있는데 문제에서 하라는대로 잘 따라하면 된다.
한 구역에 여러개의 식물이 자랄 수 있으니 deque을 이용하여 구성하면 편하게 연산할 수 있다.

from collections import deque
n,m,k = list(map(int,input().split()))
food = [[5 for i in range(n)] for _ in range(n)] ## nxn
winter_food = []
trees = [[deque([]) for i in range(n)] for _ in range(n)]

for i in range(n):
    row = list(map(int,input().split()))
    winter_food.append(row)
for i in range(m):
    x,y,z = list(map(int,input().split()))
    trees[x-1][y-1].append(z)

def a():
    for i in range(n):
        for j in range(n):
            t = len(trees[i][j])
            for k in range(t):
                if food[i][j] >= trees[i][j][k]: ## 나이보다 양분이 많다면
                    food[i][j] -= trees[i][j][k]
                    trees[i][j][k] += 1
                else:
                    for q in range(k,t):
                        food[i][j] += trees[i][j].pop() // 2
                    break
dx = [-1,-1,-1,0,0,1,1,1]
dy = [-1,0,1,-1,1,-1,0,1]

def b():
    for i in range(n):
        for j in range(n):
            t = len(trees[i][j])
            for k in range(t):
                if trees[i][j][k] % 5 == 0:
                    for q in range(8):
                        nx = i + dx[q]
                        ny = j + dy[q]
                        if 0 <= nx < n and 0 <= ny < n:
                            trees[nx][ny].appendleft(1)
            food[i][j] += winter_food[i][j]

for i in range(k):
    a()
    b()

answer = 0
for i in range(n):
    for j in range(n):
        answer += len(trees[i][j])
print(answer)
profile
꾸준히 공부하자

0개의 댓글