๊ฑฐ์ ๋ชจ๋ ๋ฌธ์ ์ defaultdict๋ฅผ ์ฌ์ฉํ๋ ๋
์ด์ ๋ ์ผ๋จ ๋๋ฌด ํธํ๋ค
๊ทธ๋ฆฌ๊ณ ์ฒ์์ ๋ชจ๋ case์ ๋ํด ๋ค ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ ๊ฒ๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ผ๋ ๋๋์ ๋ฐ์ ์ ์๋ค.
๊ทผ๋ฐ ์ด์ ์ ์ฌ๋ฆฐ ๋ฐฑ์ค 14425๋ฒ์ ์ด์ด์ ์ด๋ฒ์๋ ๊ณ์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ ์์ธ์ด defaultdict์๋ค..
๐ผ ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/16235
16235๋ฒ: ๋๋ฌด ์ฌํ ํฌ
๋ถ๋์ฐ ํฌ์๋ก ์ต๋์ ๋์ ๋ฒ ์๋๋ ์ต๊ทผ N×N ํฌ๊ธฐ์ ๋ ์ ๊ตฌ๋งคํ๋ค. ์๋๋ ์์ฌ์ด ๋ ๊ด๋ฆฌ๋ฅผ ์ํด ๋ ์ 1×1 ํฌ๊ธฐ์ ์นธ์ผ๋ก ๋๋์ด ๋์๋ค. ๊ฐ๊ฐ์ ์นธ์ (r, c)๋ก ๋ํ๋ด๋ฉฐ, r์ ๊ฐ์ฅ ์์์๋ถํฐ
www.acmicpc.net
- ํฐ์ด: ๊ณจ๋ III
- ๋ถ๋ฅ: ๊ตฌํ, ์๋ฃ๊ตฌ์กฐ, ์๋ฎฌ๋ ์ด์
๋ฌธ์ ์์ฒด๋ ๊ทธ๋ฅ ๊ทธ๋๋ก ๊ตฌํ๋ง ํ๋ฉด ๋๋ ์์ฃผ ์ฌ์ด ๋ฌธ์ ์ด๋ค.
๊ทธ๋ฌ๋..
โ ์ฝ๋ 1-1. Defaultdict๋ฅผ ์ด์ฉํ ๊ตฌํ (์คํจ)
import sys; input = sys.stdin.readline
from collections import defaultdict, deque
N, M, K = map(int, input().split())
A = [list(map(int, input().split())) for _ in range(N)]
trees = defaultdict(deque)
for _ in range(M):
x, y, age = map(int, input().split())
trees[(x-1, y-1)].append(age)
grid = [[5 for _ in range(N)] for _ in range(N)]
def spring():
num_trees = 0
tree_age5 = []
dead_trees = []
for i, j in trees:
tmp_ages = deque([])
while trees[(i, j)]:
age = trees[(i, j)].popleft()
if grid[i][j] < age:
trees[(i, j)].append(age)
dead_trees.append((i, j, sum([age // 2 for age in trees[(i, j)]])))
break
else:
grid[i][j] -= age
tmp_ages.append(age+1)
num_trees += 1
if (age + 1) % 5 == 0:
tree_age5.append((i, j))
trees[(i, j)] = tmp_ages
return dead_trees, tree_age5, num_trees
def summer(dead_trees):
for i, j, sum_ages in dead_trees:
grid[i][j] += sum_ages
adj = [(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)]
def fall(tree_age5, num_trees):
for i, j in tree_age5:
for di, dj in adj:
i_, j_ = i+di, j+dj
if 0<=i_<N and 0<=j_<N:
trees[(i_, j_)].appendleft(1)
num_trees += 1
return num_trees
def winter():
for i in range(N):
for j in range(N):
grid[i][j] += A[i][j]
for year in range(K):
dead_trees, tree_age5, num_trees = spring()
summer(dead_trees)
num_trees = fall(tree_age5, num_trees)
winter()
print(num_trees)
๐ก ์ฝ๋ 1-2. defaultdict๋ฅผ ์ด์ฉํ์ง ์์ ๊ตฌํ (์ฑ๊ณต)
import sys; input = sys.stdin.readline
from collections import deque
N, M, K = map(int, input().split())
A = [list(map(int, input().split())) for _ in range(N)]
trees = [[deque() for _ in range(N)] for _ in range(N)]
for _ in range(M):
x, y, age = map(int, input().split())
trees[x-1][y-1].append(age)
grid = [[5 for _ in range(N)] for _ in range(N)]
def spring():
num_trees = 0
tree_age5 = []
dead_trees = []
for i in range(N):
for j in range(N):
tmp_ages = deque([])
while trees[i][j]:
age = trees[i][j].popleft()
if grid[i][j] < age:
trees[i][j].append(age)
dead_trees.append((i, j, sum([age // 2 for age in trees[i][j]])))
break
else:
grid[i][j] -= age
tmp_ages.append(age+1)
num_trees += 1
if (age + 1) % 5 == 0:
tree_age5.append((i, j))
trees[i][j] = tmp_ages
return dead_trees, tree_age5, num_trees
def summer(dead_trees):
for i, j, sum_ages in dead_trees:
grid[i][j] += sum_ages
adj = [(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)]
def fall(tree_age5, num_trees):
for i, j in tree_age5:
for di, dj in adj:
i_, j_ = i+di, j+dj
if 0<=i_<N and 0<=j_<N:
trees[i_][j_].appendleft(1)
num_trees += 1
return num_trees
def winter():
for i in range(N):
for j in range(N):
grid[i][j] += A[i][j]
for year in range(K):
dead_trees, tree_age5, num_trees = spring()
summer(dead_trees)
num_trees = fall(tree_age5, num_trees)
winter()
print(num_trees)
์ฝ๋ 1-1๊ณผ ์ฝ๋ 1-2๋ trees
์ ์ด๊ธฐํ ๋ฐฉ๋ฒ๋ง ๋ค๋ฅผ ๋ฟ ๋๋จธ์ง ๋ก์ง์ ๋ชจ๋ ๊ฐ๋ค.
์ฝ๋ 1-1์ ๊ฒฝ์ฐ, trees
๋ฅผ defaultdict(deque)
๋ก ๊ตฌํํด์, spring()
์์ trees
์ key
์ ๋ํด์๋ง ๊ฒ์ฌํ๋ค.
์ฝ๋ 1-2์ ๊ฒฝ์ฐ, trees
๋ฅผ [[deque() for _ in range(N)] for _ in range(N)]
๋ก ๊ตฌํํด์, spring
์์ NxN์ ๋ชจ๋ point์ ๋ํด ๊ฒ์ฌํ๋ค.
๊ฒ์ฌํ๋ ์๋ ์ฝ๋ 1-2๊ฐ ๋ ๋ง๊ฒ ์ง๋ง, ์ฝ๋ 1-2๋ง ํต๊ณผํ๊ณ , ์ฝ๋ 1-1์ ์๊ฐ์ด๊ณผ๋ก ์คํจํ๋ค.
defaultdict์ ์คํ์๊ฐ์ด ๊ฝค๋ ์ค๋ ๊ฑธ๋ฆฐ๋ค๋ ์ฌ์ค..
์์ผ๋ก ์ ๋ ์ฐ์ง ๋ง์์ผ์ง
์ถ๊ฐ๋ก, spring-summer-fall-winter์ ๋ค ๋๋ ์ ๊ตฌํํ์ง ์์๋ ๋ค์๊ณผ ๊ฐ์ด ํ๋ฒ์ ๊ตฌํํด์ ๋ ํจ์จ์ ์ผ๋ก ์ฝ๋๋ฅผ ์งค ์ ์๋ค.
๐ก ์ฝ๋ 2. spring-summer-fall-winter์ ํ๋ฒ์ ๊ตฌํ
import sys; input = sys.stdin.readline
from collections import defaultdict, deque
N, M, K = map(int, input().split())
A = [list(map(int, input().split())) for _ in range(N)]
trees = [[deque() for _ in range(N)] for _ in range(N)]
for _ in range(M):
x, y, age = map(int, input().split())
trees[x-1][y-1].append(age)
grid = [[5 for _ in range(N)] for _ in range(N)]
adj = [(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)]
for year in range(K):
#spring
new_trees = [[deque() for _ in range(N)] for _ in range(N)]
num_trees = 0
for i in range(N):
for j in range(N):
while trees[i][j]:
age = trees[i][j].popleft()
if grid[i][j] < age:
trees[i][j].append(age)
#summer
for age in trees[i][j]:
grid[i][j] += age // 2
break
else:
grid[i][j] -= age
new_trees[i][j].append(age+1)
num_trees += 1
#fall
if (age+1) % 5 == 0:
for di, dj in adj:
i_, j_ = i+di, j+dj
if 0<=i_<N and 0<=j_<N:
new_trees[i_][j_].appendleft(1)
num_trees += 1
#winter
grid[i][j] += A[i][j]
trees = new_trees
print(num_trees)
๐ ๊ฒฐ๊ณผ