์ค์ ์ ๋ต ์ ๋ฆฌ
์ด ๋ฌธ์ ๋ ์๋ฎฌ ๋ง์.
๊ทผ๋ฐ ์์ ํ๋ ํ๋ฆฌ๋ฉด ๋ฐ๋ก ํ๋ฆผ.
์ฃผ์์
ํ์ฐ์ ์๋ณธ ์ฝ๊ณ ์ ๊ทธ๋ฆฌ๋์๋ง ์จ์ผ ์ถฉ๋ ์ ๋จ.
๊ณต๊ธฐ์ฒญ์ ๊ธฐ๋ ๋ฐฉํฅ ์์ ์ ์ธ์ฐ๋ฉด ๋งํจ.
์๋ ๋ฐ์๊ณ → ์ค๋ฅธ์ชฝ, ์, ์ผ์ชฝ, ์๋.
์๋๋ ์๊ณ → ์ค๋ฅธ์ชฝ, ์๋, ์ผ์ชฝ, ์.
๊ฒฝ๊ณ ๋๋ฆด ๋ ๋ฌด์กฐ๊ฑด ํ๋์ฉ ํฌ๋ฌธ ๋๋ ค์ผ ํ๊ณ ์์นธ 0 ์ฒ๋ฆฌ ์ ํ๋ฉด ๋จผ์ง ๊ทธ๋๋ก ๋จ์์ ํ๋ฆผ.
์๋ฎฌ์ ์์ด๋์ด๋ ์ฌ์ด๋ฐ ์ ๊ผฌ์ด๋ฉด ์ง์ฅํ.
๋ณต์ฌ ๊ทธ๋ฆฌ๋ ์ฐ๊ณ ๋ฐฉํฅ ์์ ์ ๋๋ก ์ธ์ฐ๊ธฐ.
import sys
input=sys.stdin.readline
# ๋ฏธ์ธ๋จผ์ง ํ์ฅ
def spread(grid):
new_grid=[row[:] for row in grid]
direcions=[(0,1),(-1,0),(0,-1),(1,0)]
row=len(new_grid)
col=len(new_grid[0])
for y in range(row):
for x in range(col):
if grid[y][x]!=0 and grid[y][x]!=-1:
spread_amount=grid[y][x]//5
spread_count=0
for dy,dx in direcions:
ny,nx=y+dy,x+dx
if 0<=ny<row and 0<=nx<col:
if grid[ny][nx]!=-1:
new_grid[ny][nx]+=spread_amount
spread_count+=1
new_grid[y][x]-=spread_amount*spread_count
return new_grid
# ์ฒญ์ ๊ธฐ์ (y,x) ์ขํ ๋ฐํ
def find_cleaner(grid):
row=len(grid)
col=len(grid[0])
air_pos=[]
for y in range(row):
for x in range(col):
if grid[y][x]==-1:
air_pos.append((y,x))
return air_pos
# ๋ฐ์๊ณ(์์ชฝ) ์ ํ
def purify_upper(grid, air_pos):
R, C = len(grid), len(grid[0])
y, _ = air_pos[0]
new_grid = [row[:] for row in grid]
# 1) ์ ํ๊ธฐ ํ → ์ค๋ฅธ์ชฝ
for x in range(1, C):
new_grid[y][x] = grid[y][x-1]
# 2) ์ค๋ฅธ์ชฝ ๋ ์ด ↑ ์๋ก
for i in range(y-1, -1, -1):
new_grid[i][C-1] = grid[i+1][C-1]
# 3) ๋งจ ์ ํ ← ์ผ์ชฝ
for x in range(C-2, -1, -1):
new_grid[0][x] = grid[0][x+1]
# 4) ์ผ์ชฝ ๋ ์ด ↓ ์๋๋ก
for i in range(1, y+1):
new_grid[i][0] = grid[i-1][0]
# ์ ํ ์์น ๋ง๋ฌด๋ฆฌ
new_grid[y][1] = 0
new_grid[y][0] = -1
return new_grid
# ์๊ณ(์๋์ชฝ) ์ ํ
def purify_lower(grid, air_pos):
R, C = len(grid), len(grid[0])
y, _ = air_pos[1]
new_grid = [row[:] for row in grid]
# 1) ์ ํ๊ธฐ ํ → ์ค๋ฅธ์ชฝ
for x in range(1, C):
new_grid[y][x] = grid[y][x-1]
# 2) ์ค๋ฅธ์ชฝ ๋ ์ด ↓ ์๋๋ก
for i in range(y+1, R):
new_grid[i][C-1] = grid[i-1][C-1]
# 3) ๋งจ ์๋ ํ ← ์ผ์ชฝ
for x in range(C-2, -1, -1):
new_grid[R-1][x] = grid[R-1][x+1]
# 4) ์ผ์ชฝ ๋ ์ด ↑ ์๋ก
for i in range(R-2, y-1, -1):
new_grid[i][0] = grid[i+1][0]
# ์ ํ ์์น ๋ง๋ฌด๋ฆฌ
new_grid[y][1] = 0
new_grid[y][0] = -1
return new_grid
# ๋ฏธ์ธ๋จผ์ง ์ ๊ณ์ฐ
def count_dust(grid):
new_grid=[row[:] for row in grid]
row=len(grid)
col=len(grid[0])
total=0
for y in range(row):
for x in range(col):
if grid[y][x]==-1:
continue
total+=grid[y][x]
return total
def main():
r,c,t=map(int,input().split())
grid=[list(map(int,input().split())) for _ in range(r)]
air_pos=find_cleaner(grid)
for _ in range(t):
spreaded_grid=spread(grid)
grid=purify_lower(purify_upper(spreaded_grid,air_pos),air_pos)
print(count_dust(grid))
if __name__=="__main__":
main()๋ฐ์ํ
'๐ Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| โ BOJ 10830 - ํ๋ ฌ ์ ๊ณฑ (0) | 2025.07.12 |
|---|---|
| โ BOJ 12851 - BFS ๊ฐ์ง ์ ๋์ (1) | 2025.07.11 |
| โ BOJ 11054 - DP, LIS (4) | 2025.07.09 |
| โ BOJ 5639 - ์ ์ ์ํ -> ํ์ ์ํ (1) | 2025.07.07 |
| โ BOJ 9935 - ์คํ ํ์ฉ (0) | 2025.07.07 |