알게 된 내용
- deque는 O(1) 로 맨앞에 요소를 추가할 수 있다. q.appendleft(x)
- deque는 정렬기능이 없다. 정렬 불가임.
- 빈 리스트는 list.sort() 동작하지 않는다. a = sorted(list) 이런식으로 써야함.
A = []
B = deque(A.sort()) #불가능
B = deque(sorted(A)) #가능
오답노트
- 문제가 길고 조건이 많아서, 자칫해서 문제를 잘못이해하면 몇시간을 통째로 날릴 수 있음. 코드 작성 전에 아래와 같이 조건을 잘 정리해 두었던 것이 도움이 되었음
#봄: 나이만큼 양분 먹고 / 나이 1 증가 / 여러 나무가 있으면 어린나무부터 양분먹기 / 양분없으면 사망
#여름: 죽은나무 나이 나누기2 만큼 양분추가(소수점 버림)
#가을: 5의 배수 나이인 경우 나무 번식 / 인접한 8개 칸에 나이 1인 나무 생성
#겨울: 주어진 양분 배급
- 8방향 이동을 r, c 가 0일 때와 n-1 일때 조건을 세워서 풀었음. -> 아래와 같이 작성하면 가독성도 좋고 실수할 가능성도 낮음.
#이동
dx=[-1, 0, 1,-1, 1,-1, 0, 1]
dy=[-1,-1,-1, 0, 0, 1, 1, 1]
for i in range(8):
nx=r+dx[i]
ny=c+dy[i]
if 0<=nx<n and 0<=ny<n:
tree[nx][ny].appendleft(1)
코드
import sys
from collections import deque
sys.stdin = open("input.txt", "r")
n, m, k = map(int,sys.stdin.readline().split())
A=[False for _ in range(n)]
for _ in range(n):
A[_]=list(map(int,sys.stdin.readline().split()))
#현재 양분 값 저장하는 배열
B=[[5 for i in range(n)] for j in range(n)]
#트리 배열 생성
#트리 배열 각 노드의 값 == [1나무의 나이,2나무의 나이,..., x나무의 나이]
tree=[[[] for c in range(n)] for r in range(n)]
for _ in range(m):
x,y,z = map(int,sys.stdin.readline().split())
tree[x-1][y-1].append(z)
#처음 한번만 정렬
for i in range(n):
for j in range(n):
tree[i][j] = deque(sorted(tree[i][j]))
#이동
dx=[-1, 0, 1,-1, 1,-1, 0, 1]
dy=[-1,-1,-1, 0, 0, 1, 1, 1]
for y in range(k):
sons=[] #번식하는 나무 담아둘 곳.
for r in range(n):
for c in range(n):
cnt_tree = len(tree[r][c]) #현재 땅의 나무 개수 체크
if cnt_tree ==0:
B[r][c]+=A[r][c]
continue
#봄
tmp=deque()
die=0
for age in tree[r][c]:
if age > B[r][c]:# 잔여 양분 체크
die+= age//2 #죽은나무 나이 나누기2만큼 양분추가(소수점 버림)
continue
B[r][c]-=age
tmp.append(age+1)
tree[r][c]=tmp
#여름
B[r][c] += die
#가을
for t in tree[r][c]:
if t%5 == 0: sons.append((r,c))
#겨울
B[r][c]+=A[r][c]
#가을 적용
for son in sons:
(r,c) = son
for i in range(8):
nx=r+dx[i]
ny=c+dy[i]
if 0<=nx<n and 0<=ny<n:
tree[nx][ny].appendleft(1)
#나무 개수 카운트
ans =0
for i in range(n):
for j in range(n):
ans += len(tree[i][j])
print(ans)
'sw > 알고리즘' 카테고리의 다른 글
백준 11501 주식 (0) | 2023.03.25 |
---|---|
백준 미확인도착지 (0) | 2023.03.10 |
백준 17070 파이프 옮기기1 (0) | 2023.01.24 |
프로그래머스 다리를 지나는 트럭 (0) | 2022.12.19 |
백준 2583 영역구하기 (0) | 2022.12.11 |