728x90
삼성...그저 구현...!
한 자리에 나무가 여러개가 있을 수 있으므로 각각의 값을 리스트로 설정해주어야한다.
tree = [[[] for _ in range(n)] for i in range(n)] 이런 식으로 코드를 만들어 주어야한다.
dx = [-1,-1,-1,0,0,1,1,1]
dy = [-1,0,1,-1,1,-1,0,1]
if __name__=="__main__" :
n,m,k = map(int,input().split())
# 매년 겨울 추가되는 영양분
plus_nutri = [list(map(int,input().split())) for i in range(n)]
# 영양분
ground = [[5]*n for i in range(n)]
# 트리의 나이
tree = [[[] for _ in range(n)]for i in range(n)]
for i in range(m) :
x,y,year = map(int,input().split())
tree[x-1][y-1].append(year)
for t in range(k) :
# 봄
for i in range(n):
for j in range(n) :
if tree[i][j] :
tree[i][j].sort()
tmp_tree, dead_tree = [],0
for age in tree[i][j] :
if ground[i][j] >= age : # 영양분이 나이보다 많다면
ground[i][j] -= age
age+=1 # 나무의 나이 1살 증가
tmp_tree.append(age)
else :
dead_tree+= age //2 # 영양분이 없다면 여름의 비료를 위해
# 여름
ground[i][j] += dead_tree
tree[i][j] = []
tree[i][j].extend(tmp_tree) # 살아남은 나무들로 초기화
# 가을
for i in range(n) :
for j in range(n) :
if tree[i][j] :
for year in tree[i][j] :
if year>0 and year%5 ==0 :
for k in range(8) :
nx,ny = i + dx[k], j + dy[k]
if 0<=nx<n and 0<=ny<n :
tree[nx][ny].append(1)
# 겨울
# 영양분 보충
ground[i][j] += plus_nutri[i][j]
ans = 0
for i in range(n) :
for j in range(n) :
# 해당 위치의 나무의 개수
ans += len(tree[i][j])
print(ans)
약간 다른 코드 (복습하면서 나온 코드):
근데 좀더 오래 걸림
dx = [1,0,-1,0,-1,-1,1,1]
dy = [0,1,0,-1,-1,1,1,-1]
if __name__=="__main__" :
n,m,k = map(int,input().split())
# 추가할 양분
extra = [list(map(int,input().split())) for i in range(n)]
# 나무의 나이
mp = [[[] for i in range(n)] for i in range(n)]
# 초기 양분
energy = [[5]*n for i in range(n)]
# 나무 심기
for i in range(m) :
x,y,z = map(int,input().split())
mp[x-1][y-1].append(z)
for _ in range(k) :
# 봄
for i in range(n) :
for j in range(n) :
if len(mp[i][j]) >=1 :
dead_tree = 0
mp[i][j].sort()
tmp =[]
while mp[i][j] :
old = mp[i][j].pop(0)
if energy[i][j] >= old :
energy[i][j] -= old
tmp.append(old+1)
else :
dead_tree+= old //2
mp[i][j].extend(tmp)
# 여름
energy[i][j] += dead_tree
# 가을
for i in range(n) :
for j in range(n) :
if len(mp[i][j])>=1 :
for k in mp[i][j] :
if k%5 ==0 :
for dir in range(8) :
nx,ny = i+dx[dir], j + dy[dir]
if 0<=nx<n and 0<=ny<n :
mp[nx][ny].append(1)
# 겨울
energy[i][j] += extra[i][j]
cnt = 0
for i in range(n) :
for j in range(n) :
if len(mp[i][j])>=1 :
cnt += len(mp[i][j])
print(cnt)
참고 블로그 :
https://chldkato.tistory.com/127
반응형
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
[삼성SW역량][Python/BOJ] 백준 16236 마법사 상어와 파이어볼(구현) (0) | 2022.07.22 |
---|---|
[삼성SW역량][Python/BOJ] 백준 16236 아기상어(BFS,구현) (0) | 2022.07.21 |
[삼성SW역량][Python/BOJ] 백준 17779 게리맨더링2(구현) (0) | 2022.07.21 |
[삼성SW역량][Python/BOJ] 백준 17142 연구소3(BFS) (0) | 2022.07.18 |
[삼성SW역량][Python/BOJ] 백준 17140 이차원 배열과 연산(구현) (0) | 2022.07.18 |