ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
์๋ฎฌ๋ ์ด์ ๋ฌธ์ ๋ก ๋ฌธ์ ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ๊ทธ๋๋ก ๊ตฌํํ๋ฉด ๋๋ค. ๋๋ฌด๋ค์ ๊ณ์ ์ ๋ฐ๋ผ ๋ค์๊ณผ ๊ฐ์ด ๋์ด๊ฐ ๋ณํํ๊ฒ ๋๋ค. ๋ฐ๋ผ์ ๊ฐ ๊ณ์ ์ ๋ฐ๋ฅธ ๋ก์ง์ ๊ตฌํํ๊ณ `K` ๋งํผ ๋ฐ๋ณตํ๋ฉด ๋ต์ ์ฐพ์ ์ ์๋ค.
- ๋ด
- ๋๋ฌด ๋์ด ๋งํผ์ ์๋ถ์ ๋จน๊ณ ๋์ด๊ฐ 1 ์ฆ๊ฐํ๋ค.
- ์์ ์ด ์์นํ ๊ณณ์ ์๋ถ๋ง ๋จน์ ์ ์๋ค.
- ํ๋์ ์นธ์ ์ฌ๋ฌ ๊ฐ์ ๋๋ฌด๊ฐ ์๋ค๋ฉด, ๋์ด๊ฐ ์ด๋ฆฐ ๋๋ฌด๋ถํฐ ์๋ถ์ ์ญ์ทจํ๋ค.
- ๋๋ฌด์ ๋์ด๋งํผ ์๋ถ์ ๋จน์ง ๋ชปํ๋ฉด ์ฃฝ๊ฒ ๋๋ค.
- ์ฌ๋ฆ
- ๋ด์ ์ฃฝ์ ๋๋ฌด๊ฐ ์๋ถ์ผ๋ก ๋ณํ๊ฒ ๋๋ค.
- ์ฃฝ์ ๋๋ฌด์ ๋์ด๋ฅผ 2๋ก ๋๋ ๊ฐ์ด ๋๋ฌด๊ฐ ์๋ ์นธ์ ์๋ถ์ผ๋ก ์ถ๊ฐ๋๋ค.
- ๊ฐ์
- ๋๋ฌด๊ฐ 8 ๋ฐฉํฅ์ผ๋ก ๋ฒ์์ ํ๋ฉฐ, ๋ฒ์ ๊ฐ๋ฅํ ๋๋ฌด๋ ๋์ด๊ฐ 5์ ๋ฐฐ์์ฌ์ผ ํ๋ค.
- NxN ํฌ๊ธฐ๋ฅผ ๋ฒ์ด๋ ๊ฒฝ์ฐ ๋ฒ์์ ํ์ง ์๋๋ค.
- ๊ฒจ์ธ
- ๋ก๋ด์ด ๋์๋ค๋๋ฉฐ, ์ด๊ธฐ์ ์ฃผ์ด์ง ๊ฐ์ ๋ฐ๋ผ ์๋ถ์ ์ถ๊ฐํ๋ค.
์ฆ ๋ด์ ๋์ด๊ฐ ์ด๋ฆฐ ๋๋ฌด ๋ถํฐ ์๋ถ์ ์ญ์ทจํ๊ณ , ๋ ์ด์ ์๋ถ์ ์ญ์ทจํ ์ ์๋ ๊ฒฝ์ฐ ๋๋จธ์ง๋ ์ฃฝ์ ๋๋ฌด๊ฐ ๋๋ฏ๋ก ์ฌ๋ฆ์ ๋ก์ง์ ์คํํ๋ฉด ๋๋ค. ์ดํ์ ๊ฐ์, ๊ฒจ์ธ์ ๋ก์ง์ ๊ฐ๋จํ๋ค.
์ฝ๋
from sys import stdin
def spring_summer():
for x in range(n):
for y in range(n):
if not tree[x][y]:
continue
# ์ด๋ฆฐ ๋๋ฌด ๋ถํฐ ์์๋๋ก ์ ๋ ฌ.
tree[x][y].sort()
for idx, cur_age in enumerate(tree[x][y]):
# ๋ด
if cur_age <= graph[x][y]:
graph[x][y] -= cur_age
tree[x][y][idx] += 1
# ์ฌ๋ฆ
else:
# ์ฃฝ์ ๋๋ฌด์ ์๋ถ์ ์ ์ฅํจ.
graph[x][y] += (sum([(die // 2) for die in tree[x][y][idx:]]))
# ๋ค์ ๋๋ฌด๋ค์ ์ฃฝ์ ๋๋ฌด ์ด๋ฏ๋ก ๊ฐ์ ๋ ๋ฆผ.
tree[x][y] = tree[x][y][:idx]
break
def fall():
for x in range(n):
for y in range(n):
cnt = 0
if not tree[x][y]:
continue
for cur_age in tree[x][y]:
# 5์ ๋ฐฐ์์ผ ๊ฒฝ์ฐ๋ง
if cur_age % 5 == 0:
cnt += 1
if cnt:
for dx, dy in dirs:
next_x, next_y = x + dx, y + dy
if 0 <= next_x < n and 0 <= next_y < n:
for _ in range(cnt):
tree[next_x][next_y].append(1)
def winter():
for x in range(n):
for y in range(n):
graph[x][y] += nutrient[x][y]
if __name__ == '__main__':
dirs = ((-1, -1), (-1, 0), (-1, 1), (0, 1), (1, 1), (1, 0), (1, -1), (0, -1))
n, m, k = map(int, stdin.readline().split())
# ๊ฒจ์ธ์ ์ถ๊ฐํ ์๋ถ ๊ฐ.
nutrient = [list(map(int, stdin.readline().split())) for _ in range(n)]
# ๋ชจ๋ ์นธ์ ์๋ถ์ 5์ฉ ๋ค์ด ์์
graph = [[5] * n for _ in range(n)]
tree = [[[] for _ in range(n)] for _ in range(n)]
for _ in range(m):
i, j, age = map(int, stdin.readline().split())
tree[i - 1][j - 1].append(age)
# k๋งํผ ๋ฐ๋ณต๋ฌธ์ ๋๋ฉฐ, ๋ด, ์ฌ๋ฆ, ๊ฐ์, ๊ฒจ์ธ์ ์๋ฎฌ๋ ์ด์
ํ๋ฉด ๋จ.
for _ in range(k):
spring_summer()
fall()
winter()
answer = 0
for i in range(n):
for j in range(n):
answer += len(tree[i][j])
print(answer)
ํ์ด์ฌ์ผ๋ก๋ ํด๋น ์ฝ๋๊ฐ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ์ฌ PyPy3๋ก ์ ์ถํ์๋ค. ์๋ง `sort`์ `indexing`ํ๋ ์ค๋ฒํค๋๋ก ์ธํด ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ ๊ฒ ๊ฐ๋ค.
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 16234 ์ธ๊ตฌ ์ด๋ (0) | 2020.10.17 |
---|---|
๋ฐฑ์ค: 17143 ๋์์ (0) | 2020.10.15 |
๋ฐฑ์ค: 19236 ์ฒญ์๋ ์์ด (0) | 2020.10.13 |
๋ฐฑ์ค: 16236 ์๊ธฐ ์์ด (0) | 2020.10.12 |
๋ฐฑ์ค: 17089 ์ธ ์น๊ตฌ (0) | 2020.10.10 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ