์ผ์ฑ SW ์ญ๋ ํ ์คํธ ๊ธฐ์ถ ๋ฌธ์ - 17144๋ฒ ๋ฏธ์ธ๋จผ์ง ์๋ !
๋ฌธ์
๋ฏธ์ธ๋จผ์ง๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด ๊ตฌ์ฌ๊ณผ๋ ๊ณต๊ธฐ์ฒญ์ ๊ธฐ๋ฅผ ์ค์นํ๋ ค๊ณ ํ๋ค. ๊ณต๊ธฐ์ฒญ์ ๊ธฐ์ ์ฑ๋ฅ์ ํ ์คํธํ๊ธฐ ์ํด ๊ตฌ์ฌ๊ณผ๋ ์ง์ ํฌ๊ธฐ๊ฐ R×C์ธ ๊ฒฉ์ํ์ผ๋ก ๋ํ๋๊ณ , 1×1 ํฌ๊ธฐ์ ์นธ์ผ๋ก ๋๋ด๋ค. ๊ตฌ์ฌ๊ณผ๋ ๋ฐ์ด๋ ์ฝ๋ฉ ์ค๋ ฅ์ ์ด์ฉํด ๊ฐ ์นธ (r, c)์ ์๋ ๋ฏธ์ธ๋จผ์ง์ ์์ ์ค์๊ฐ์ผ๋ก ๋ชจ๋ํฐ๋งํ๋ ์์คํ ์ ๊ฐ๋ฐํ๋ค. (r, c)๋ rํ c์ด์ ์๋ฏธํ๋ค.
๊ณต๊ธฐ์ฒญ์ ๊ธฐ๋ ํญ์ 1๋ฒ ์ด์ ์ค์น๋์ด ์๊ณ , ํฌ๊ธฐ๋ ๋ ํ์ ์ฐจ์งํ๋ค. ๊ณต๊ธฐ์ฒญ์ ๊ธฐ๊ฐ ์ค์น๋์ด ์์ง ์์ ์นธ์๋ ๋ฏธ์ธ๋จผ์ง๊ฐ ์๊ณ , (r, c)์ ์๋ ๋ฏธ์ธ๋จผ์ง์ ์์ Ar,c์ด๋ค.
1์ด ๋์ ์๋ ์ ํ ์ผ์ด ์์๋๋ก ์ผ์ด๋๋ค.
- ๋ฏธ์ธ๋จผ์ง๊ฐ ํ์ฐ๋๋ค. ํ์ฐ์ ๋ฏธ์ธ๋จผ์ง๊ฐ ์๋ ๋ชจ๋ ์นธ์์ ๋์์ ์ผ์ด๋๋ค.
- (r, c)์ ์๋ ๋ฏธ์ธ๋จผ์ง๋ ์ธ์ ํ ๋ค ๋ฐฉํฅ์ผ๋ก ํ์ฐ๋๋ค.
- ์ธ์ ํ ๋ฐฉํฅ์ ๊ณต๊ธฐ์ฒญ์ ๊ธฐ๊ฐ ์๊ฑฐ๋, ์นธ์ด ์์ผ๋ฉด ๊ทธ ๋ฐฉํฅ์ผ๋ก๋ ํ์ฐ์ด ์ผ์ด๋์ง ์๋๋ค.
- ํ์ฐ๋๋ ์์ Ar,c/5์ด๊ณ ์์์ ์ ๋ฒ๋ฆฐ๋ค.
- (r, c)์ ๋จ์ ๋ฏธ์ธ๋จผ์ง์ ์์ Ar,c - (Ar,c/5)×(ํ์ฐ๋ ๋ฐฉํฅ์ ๊ฐ์) ์ด๋ค.
- ๊ณต๊ธฐ์ฒญ์ ๊ธฐ๊ฐ ์๋ํ๋ค.
- ๊ณต๊ธฐ์ฒญ์ ๊ธฐ์์๋ ๋ฐ๋์ด ๋์จ๋ค.
- ์์ชฝ ๊ณต๊ธฐ์ฒญ์ ๊ธฐ์ ๋ฐ๋์ ๋ฐ์๊ณ๋ฐฉํฅ์ผ๋ก ์ํํ๊ณ , ์๋์ชฝ ๊ณต๊ธฐ์ฒญ์ ๊ธฐ์ ๋ฐ๋์ ์๊ณ๋ฐฉํฅ์ผ๋ก ์ํํ๋ค.
- ๋ฐ๋์ด ๋ถ๋ฉด ๋ฏธ์ธ๋จผ์ง๊ฐ ๋ฐ๋์ ๋ฐฉํฅ๋๋ก ๋ชจ๋ ํ ์นธ์ฉ ์ด๋ํ๋ค.
- ๊ณต๊ธฐ์ฒญ์ ๊ธฐ์์ ๋ถ๋ ๋ฐ๋์ ๋ฏธ์ธ๋จผ์ง๊ฐ ์๋ ๋ฐ๋์ด๊ณ , ๊ณต๊ธฐ์ฒญ์ ๊ธฐ๋ก ๋ค์ด๊ฐ ๋ฏธ์ธ๋จผ์ง๋ ๋ชจ๋ ์ ํ๋๋ค.
๋ค์์ ํ์ฐ์ ์์์ด๋ค.
๊ณต๊ธฐ์ฒญ์ ๊ธฐ์ ๋ฐ๋์ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉํฅ์ผ๋ก ์ํํ๋ค.
๋ฐฉ์ ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋, T์ด๊ฐ ์ง๋ ํ ๊ตฌ์ฌ๊ณผ์ ๋ฐฉ์ ๋จ์์๋ ๋ฏธ์ธ๋จผ์ง์ ์์ ๊ตฌํด๋ณด์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ R, C, T (6 ≤ R, C ≤ 50, 1 ≤ T ≤ 1,000) ๊ฐ ์ฃผ์ด์ง๋ค.
๋์งธ ์ค๋ถํฐ R๊ฐ์ ์ค์ Ar,c (-1 ≤ Ar,c ≤ 1,000)๊ฐ ์ฃผ์ด์ง๋ค. ๊ณต๊ธฐ์ฒญ์ ๊ธฐ๊ฐ ์ค์น๋ ๊ณณ์ Ar,c๊ฐ -1์ด๊ณ , ๋๋จธ์ง ๊ฐ์ ๋ฏธ์ธ๋จผ์ง์ ์์ด๋ค. -1์ 2๋ฒ ์์๋๋ก ๋ถ์ด์ ธ ์๊ณ , ๊ฐ์ฅ ์ ํ, ์๋ซ ํ๊ณผ ๋ ์นธ์ด์ ๋จ์ด์ ธ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ T์ด๊ฐ ์ง๋ ํ ๊ตฌ์ฌ๊ณผ ๋ฐฉ์ ๋จ์์๋ ๋ฏธ์ธ๋จผ์ง์ ์์ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ1
7 8 1
0 0 0 0 0 0 0 9
0 0 0 0 3 0 0 8
-1 0 5 0 0 0 22 0
-1 8 0 0 0 0 0 0
0 0 0 0 0 10 43 0
0 0 5 0 15 0 0 0
0 0 40 0 0 0 20 0
์์ ์ถ๋ ฅ1
188
๋ฏธ์ธ๋จผ์ง์ ํ์ฐ์ด ์ผ์ด๋๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ํ๊ฐ ๋๋ค.
๊ณต๊ธฐ์ฒญ์ ๊ธฐ๊ฐ ์๋ํ ์ดํ ์ํ๋ ์๋์ ๊ฐ๋ค.
ํ์ด
1) ๊ณต๊ธฐ์ฒญ์ ๊ธฐ์ ์์น๋ฅผ ์ฐพ์์ up, down ๋ณ์์ ๋ฃ์ด์ค๋ค (๊ณต๊ธฐ์ฒญ์ ๊ธฐ ํจ์์์ ์ฌ์ฉ)
2) spread() : ๋ฏธ์ธ๋จผ์ง ํ์ฐ ํจ์
- ๋ฐฐ์ด h์ ํ์ฐ๋ ๋ฏธ์ธ๋จผ์ง ์์ ๊ณ์ฐํ์ฌ ๋ด์์ฃผ๊ณ ๋ง์ง๋ง์ ๊ธฐ์กด house ๋ฐฐ์ด ์์์ ํ์ฐ ํ ๋ฏธ์ธ๋จผ์ง ์์ ๋ฐ์ํด์ค๋ค.
3) clean_up() : ๊ณต๊ธฐ์ฒญ์ ๊ธฐ ์๋ถ๋ถ
- dx, dy ๋ฐฐ์ด์ ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก ์ด๋ํ ์ ์๊ฒ ์ ์ธ
- ๊ณต๊ธฐ์ฒญ์ ๊ธฐ ์์นธ๋ถํฐ ์์ํ์ฌ ๊ณต๊ธฐ์ฒญ์ ๊ธฐ ์์น๊น์ง while๋ฌธ์ด ๋ฐ๋ณต๋๋ค.
- ๋ฒ์ ๋ฒ์ด๋๋ฉด ๋ฐฉํฅ์ ๋ฐ๊ฟ์ค๋ค
- ๋ฐ๋ ๋ถ๋ฉด์ ํ ์นธ์ฉ ์ด๋ํด์ค๋ค. ํ์ฌ ์์น ๊ฐ๊ณผ ์ด์ ์ ์ ์ฅํ๋ before ๊ฐ์ ์๋ก ๋ฐ๊ฟ์ค๋ค
4) clean_down() : ๊ณต๊ธฐ์ฒญ์ ๊ธฐ ์๋ซ๋ถ๋ถ
- dx, dy ๋ฐฐ์ด์ ์๊ณ ๋ฐฉํฅ์ผ๋ก ์ด๋ํ ์ ์๊ฒ ์ ์ธ
- ๊ณต๊ธฐ์ฒญ์ ๊ธฐ ์์นธ๋ถํฐ ์์ํ์ฌ ๊ณต๊ธฐ์ฒญ์ ๊ธฐ ์์น๊น์ง while๋ฌธ์ด ๋ฐ๋ณต๋๋ค.
- ๋ฒ์ ๋ฒ์ด๋๋ฉด ๋ฐฉํฅ์ ๋ฐ๊ฟ์ค๋ค
- ๋ฐ๋ ๋ถ๋ฉด์ ํ ์นธ์ฉ ์ด๋ํด์ค๋ค. ํ์ฌ ์์น ๊ฐ๊ณผ ์ด์ ์ ์ ์ฅํ๋ before ๊ฐ์ ์๋ก ๋ฐ๊ฟ์ค๋ค
5) t์ด๊ฐ ์์ ๊ณผ์ ์ ์งํํ๋ค
6) t์ด ํ์ ๋จ์์๋ ๋ฏธ์ธ๋จผ์ง์ ์์ ๋ชจ๋ ๋ํ์ฌ answer์ ๋ด๊ณ ์ถ๋ ฅํ๋ค
# ์ผ์ฑ SW ์ญ๋ ํ
์คํธ ๊ธฐ์ถ ๋ฌธ์
# ๋ฐฑ์ค 17144๋ฒ. ๋ฏธ์ธ๋จผ์ง ์๋
!
# ๊ตฌํ, ์๋ฎฌ๋ ์ด์
r, c, t = map(int, input().split())
house = [list(map(int, input().split())) for i in range(r)]
up = -1
down = -1
# ๊ณต๊ธฐ์ฒญ์ ๊ธฐ ์์น ์ฐพ๊ธฐ
for i in range(r):
# 0์ธ ์ด์ ๋ ๊ณต๊ธฐ์ฒญ์ ๊ธฐ๋ ํญ์ 1๋ฒ์ด์ ์ค์น๋์ด์๊ธฐ ๋๋ฌธ
if house[i][0] == -1:
up = i
down = i + 1
break
# ๋ฏธ์ธ๋จผ์ง ํ์ฐ
def spread():
dx = [0, -1, 0, 1]
dy = [-1, 0, 1, 0]
# ํ์ฐ๋ ๋ฏธ์ธ๋จผ์ง ์์ ๋ด์ ๋ฐฐ์ด
h = [[0] * c for _ in range(r)]
for x in range(r):
for y in range(c):
if house[x][y] != 0 and house[x][y] != -1:
cnt = 0 # ํ์ฐ๋ ๋ฐฉํฅ์ ๊ฐ์
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
# ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ๊ฒฝ์ฐ ํน์ ๊ณต๊ธฐ์ฒญ์ ๊ธฐ๊ฐ ์๋ ๊ฒฝ์ฐ์ ํ์ฐ์ด ์ผ์ด๋์ง ์์
if nx < 0 or nx >= r or ny < 0 or ny >= c or house[nx][ny] == -1:
continue
else:
h[nx][ny] += house[x][y] // 5
cnt += 1
h[x][y] += (house[x][y] - (house[x][y] // 5) * cnt)
# ํ์ฐ ํ ๋ฏธ์ธ๋จผ์ง ์์ ๋ฐ์ํด์ค๋ค
for i in range(r):
for j in range(c):
if house[i][j] != -1:
house[i][j] = h[i][j]
# ๊ณต๊ธฐ์ฒญ์ ๊ธฐ ์๋ถ๋ถ
def clean_up():
dx = [0, -1, 0, 1]
dy = [1, 0, -1, 0]
i = 0
before = 0
x, y = up, 1 # ๊ณต๊ธฐ์ฒญ์ ๊ธฐ ์ ๋ถํฐ ์์ํ๋ฏ๋ก y๋ 1๋ก ์ค์ ํจ
while True:
nx = x + dx[i]
ny = y + dy[i]
if x == up and y == 0: # ๊ณต๊ธฐ์ฒญ์ ๊ธฐ ์์น์ ๊ฐ์ผ๋ฉด
break
if nx < 0 or nx >= r or ny < 0 or ny >= c: # ๋ฒ์ ๋ฒ์ด๋๋ฉด ๋ฐฉํฅ ๋ฐ๊ฟ์ค
i += 1
continue
# ๋ฐ๋๋ถ๋ฉด ๋ฐฉํฅ๋๋ก ํ์นธ์ฉ ์ด๋
house[x][y], before = before, house[x][y]
x, y = nx, ny
def clean_down():
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]
i = 0
before = 0
x, y = down, 1
while True:
nx = x + dx[i]
ny = y + dy[i]
if x == down and y == 0:
break
if nx < 0 or nx >= r or ny < 0 or ny >= c:
i += 1
continue
house[x][y], before = before, house[x][y]
x, y = nx, ny
#t์ด ํ ๊ฒฐ๊ณผ
for i in range(t):
# ๋ฏธ์ธ๋จผ์ง ํ์ฐ
spread()
# ๊ณต๊ธฐ์ฒญ์ ๊ธฐ ์๋
clean_up()
clean_down()
# t์ด ํ ๋จ์์๋ ๋ฏธ์ธ๋จผ์ง์ ์ ์ดํฉ ์ถ๋ ฅ
# ๊ณต๊ธฐ์ฒญ์ ๊ธฐ ๊ฐ ๋นผ์ค์ผํ๋ฏ๋ก 2๋ก ์ค์
answer = 2
for i in range(r):
for j in range(c):
answer += house[i][j]
print(answer)
์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ
- ๊ตฌํ
- ์๋ฎฌ๋ ์ด์