[백준 16235번] 나무 재테크 - Python으로 구현하기
문제 접근
- 봄,여름,가을,겨울 주어진 조건대로 구현하기
- 나무의 나이를 리스트로 만들어 2D에 저장 하여 구현하자
생각해볼 점
- 가을에 나무가 확산 될 때 리스트의 앞에 넣으면 정렬을 반복 할 필요가 없을 것 같다.
오답 분석
- 여름에서 나무의 나무를 증가시키고 양분을 제거하는 실수를 범했다. 찾기 엄청 힘들었다..
N,M,K=map(int,input().split()) # n:n*n, m개 나무 k년
A = [list(map(int,input().split())) for _ in range(N)]
tree = [[[] for _ in range(N)] for _ in range(N)]
for _ in range(M):
x,y,z=map(int,input().split())
tree[x-1][y-1].append(z)
ground = [[5]*N for _ in range(N)]
for _ in range(K):
# 봄
for i in range(N):
for j in range(N):
if len(tree[i][j])<=0: continue
tree[i][j].sort()
idx=0
while idx<len(tree[i][j]):
if tree[i][j][idx]<=ground[i][j]:
ground[i][j]-=tree[i][j][idx]
tree[i][j][idx] += 1
idx+=1
else:
die = tree[i][j][idx:]
for now in die: # 죽은나무!
ground[i][j]+=(now//2)
tree[i][j]=tree[i][j][:idx]
break
# 가을
di = [[-1,0],[0,-1],[1,0],[0,1],[1,1],[1,-1],[-1,1],[-1,-1]]
for i in range(N):
for j in range(N):
c=0
if tree[i][j]:
for now in tree[i][j]:
if now%5==0:
c+=1
if c>0:
for k in range(8):
ni=i+di[k][0]
nj=j+di[k][1]
if 0<=ni<N and 0<=nj<N:
for _ in range(c):
tree[ni][nj].append(1)
# 겨울
for i in range(N):
for j in range(N):
ground[i][j]+=A[i][j]
ans=0
for i in range(N):
for j in range(N):
ans+=len(tree[i][j])
print(ans)
* 틀린 부분이나 더 나은 방법이 있을 수 있습니다. 지적해주시면 감사하겠습니다!!
'posts' 카테고리의 다른 글
[백준 15686번] 치킨 배달 - Python으로 구현하기 (0) | 2019.10.19 |
---|---|
[백준 16234번] 인구 이동 - Python으로 구현하기 (0) | 2019.10.19 |
[백준 16236번] 아기 상어 - Python으로 구현하기 (0) | 2019.10.19 |
[백준 17144번] 미세먼지 안녕! - Python으로 구현하기 (0) | 2019.10.19 |
[백준 17143번] 낚시왕 - Python으로 구현하기 (1) | 2019.10.19 |