[BOJ][๐ก5][๋ฐฑ์ค#21610] ๋ง๋ฒ์ฌ ์์ด์ ๋น๋ฐ๋ผ๊ธฐ
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold V
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
๋ง๋ฒ์ฌ ์์ด๋ย ํ์ด์ด๋ณผ,ย ํ ๋ค์ด๋, ํ์ด์ด์คํฐ, ๋ฌผ๋ณต์ฌ๋ฒ๊ทธย ๋ง๋ฒ์ ํ ์ ์๋ค. ์ค๋ ์๋ก ๋ฐฐ์ด ๋ง๋ฒ์ ๋น๋ฐ๋ผ๊ธฐ์ด๋ค. ๋น๋ฐ๋ผ๊ธฐ๋ฅผ ์์ ํ๋ฉด ํ๋์ ๋น๊ตฌ๋ฆ์ ๋ง๋ค ์ ์๋ค. ์ค๋์ ๋น๋ฐ๋ผ๊ธฐ๋ฅผ ํฌ๊ธฐ๊ฐ NรN์ธ ๊ฒฉ์์์ ์ฐ์ตํ๋ ค๊ณ ํ๋ค. ๊ฒฉ์์ ๊ฐ ์นธ์๋ ๋ฐ๊ตฌ๋๊ฐ ํ๋ ์๊ณ , ๋ฐ๊ตฌ๋๋ ์นธ ์ ์ฒด๋ฅผ ์ฐจ์งํ๋ค. ๋ฐ๊ตฌ๋์ ์ ์ฅํ ์ ์๋ ๋ฌผ์ ์์๋ ์ ํ์ด ์๋ค. (r, c)๋ ๊ฒฉ์์ rํ c์ด์ ์๋ ๋ฐ๊ตฌ๋๋ฅผ ์๋ฏธํ๊ณ , A[r][c]๋ (r, c)์ ์๋ ๋ฐ๊ตฌ๋์ ์ ์ฅ๋์ด ์๋ ๋ฌผ์ ์์ ์๋ฏธํ๋ค. ๊ฒฉ์์ ๊ฐ์ฅ ์ผ์ชฝ ์ ์นธ์ (1, 1)์ด๊ณ , ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋ซย ์นธ์ (N, N)์ด๋ค. ๋ง๋ฒ์ฌ ์์ด๋ ์ฐ์ต์ ์ํด 1๋ฒ ํ๊ณผ N๋ฒ ํ์ ์ฐ๊ฒฐํ๊ณ , 1๋ฒ ์ด๊ณผ N๋ฒ ์ด๋ ์ฐ๊ฒฐํ๋ค. ์ฆ, N๋ฒ ํ์ ์๋์๋ 1๋ฒ ํ์ด,ย 1๋ฒ ํ์ ์์๋ N๋ฒ ํ์ด ์๊ณ , 1๋ฒ ์ด์ ์ผ์ชฝ์๋ N๋ฒ ์ด์ด, N๋ฒ ์ด์ ์ค๋ฅธ์ชฝ์๋ 1๋ฒ ์ด์ด ์๋ค. ๋น๋ฐ๋ผ๊ธฐ๋ฅผย ์์ ํ๋ฉด (N, 1), (N, 2), (N-1, 1), (N-1, 2)์ ๋น๊ตฌ๋ฆ์ด ์๊ธด๋ค. ๊ตฌ๋ฆ์ ์นธ ์ ์ฒด๋ฅผ ์ฐจ์งํ๋ค. ์ด์ ๊ตฌ๋ฆ์ ์ด๋์ M๋ฒ ๋ช ๋ นํ๋ ค๊ณ ํ๋ค. i๋ฒ์งธ ์ด๋ ๋ช ๋ น์ ๋ฐฉํฅ di๊ณผ ๊ฑฐ๋ฆฌ si๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๋ฐฉํฅ์ ์ด 8๊ฐ์ ๋ฐฉํฅ์ด ์์ผ๋ฉฐ, 8๊ฐ์ ์ ์๋ก ํํํ๋ค. 1๋ถํฐ ์์๋๋กย โ,ย โ,ย โ,ย โ,ย โ,ย โ,ย โ,ย โ ์ด๋ค.ย ์ด๋์ ๋ช ๋ นํ๋ฉด ๋ค์์ด ์์๋๋ก ์งํ๋๋ค.
๋ชจ๋ ๊ตฌ๋ฆ์ด di ๋ฐฉํฅ์ผ๋ก si์นธ ์ด๋ํ๋ค. ๊ฐ ๊ตฌ๋ฆ์์ ๋น๊ฐ ๋ด๋ คย ๊ตฌ๋ฆ์ด ์๋ ์นธ์ ๋ฐ๊ตฌ๋์ ์ ์ฅ๋ ๋ฌผ์ ์์ด 1 ์ฆ๊ฐํ๋ค. ๊ตฌ๋ฆ์ด ๋ชจ๋ ์ฌ๋ผ์ง๋ค. 2์์ ๋ฌผ์ด ์ฆ๊ฐํ ์นธ (r, c)์ ๋ฌผ๋ณต์ฌ๋ฒ๊ทธ ๋ง๋ฒ์ ์์ ํ๋ค. ๋ฌผ๋ณต์ฌ๋ฒ๊ทธ ๋ง๋ฒ์ ์ฌ์ฉํ๋ฉด, ๋๊ฐ์ ๋ฐฉํฅ์ผ๋ก ๊ฑฐ๋ฆฌ๊ฐ 1์ธย ์นธ์ ๋ฌผ์ด ์๋ ๋ฐ๊ตฌ๋์ ์๋งํผ (r, c)์ ์๋ ๋ฐ๊ตฌ๋์ ๋ฌผ์ด ์์ด ์ฆ๊ฐํ๋ค.
์ด๋๋ ์ด๋๊ณผ ๋ค๋ฅด๊ฒ ๊ฒฝ๊ณ๋ฅผ ๋์ด๊ฐ๋ ์นธ์ ๋๊ฐ์ ๋ฐฉํฅ์ผ๋ก ๊ฑฐ๋ฆฌ๊ฐ 1์ธ ์นธ์ด ์๋๋ค. ์๋ฅผ ๋ค์ด, (N, 2)์์ ์ธ์ ํ ๋๊ฐ์ ์นธ์ (N-1, 1), (N-1, 3)์ด๊ณ , (N, N)์์ ์ธ์ ํ ๋๊ฐ์ ์นธ์ (N-1, N-1)๋ฟ์ด๋ค.
๋ฐ๊ตฌ๋์ ์ ์ฅ๋ ๋ฌผ์ ์์ด 2 ์ด์์ธ ๋ชจ๋ ์นธ์ ๊ตฌ๋ฆ์ด ์๊ธฐ๊ณ , ๋ฌผ์ ์์ด 2 ์ค์ด๋ ๋ค. ์ด๋ ๊ตฌ๋ฆ์ด ์๊ธฐ๋ ์นธ์ 3์์ ๊ตฌ๋ฆ์ด ์ฌ๋ผ์ง ์นธ์ด ์๋์ด์ผ ํ๋ค.
M๋ฒ์ ์ด๋์ด ๋ชจ๋ ๋๋ ํ ๋ฐ๊ตฌ๋์ ๋ค์ด์๋ ๋ฌผ์ ์์ ํฉ์ ๊ตฌํด๋ณด์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N, M์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ N๊ฐ์ ์ ์๊ฐ ์ฃผ์ด์ง๋ค. r๋ฒ์งธ ํ์ c๋ฒ์งธ ์ ์๋ A[r][c]๋ฅผ ์๋ฏธํ๋ค. ๋ค์ M๊ฐ์ ์ค์๋ ์ด๋์ ์ ๋ณด di, si๊ฐ ์์๋๋ก ํ ์ค์ ํ๋์ฉ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ M๋ฒ์ ์ด๋์ด ๋ชจ๋ ๋๋ ํ ๋ฐ๊ตฌ๋์ ๋ค์ด์๋ ๋ฌผ์ ์์ ํฉ์ ์ถ๋ ฅํ๋ค.
์ ํ
2 โค N โค 50 1 โค M โค 100 0 โค A[r][c] โค 100 1 โค di โค 8 1 โค si โค 50
์์
์์ 1
์ ๋ ฅ
5 4
0 0 1 0 2
2 3 2 1 0
4 3 2 9 0
1 0 2 9 0
8 8 2 1 0
1 3
3 4
8 1
4 8
์ถ๋ ฅ
77
์์ 2
์ ๋ ฅ
5 8
0 0 1 0 2
2 3 2 1 0
0 0 2 0 0
1 0 2 0 0
0 0 2 1 0
1 9
2 8
3 7
4 6
5 5
6 4
7 3
8 2
์ถ๋ ฅ
41
์์ 3
์ ๋ ฅ
5 8
100 100 100 100 100
100 100 100 100 100
100 100 100 100 100
100 100 100 100 100
100 100 100 100 100
8 1
7 1
6 1
5 1
4 1
3 1
2 1
1 1
์ถ๋ ฅ
2657
My Sol
def main():
def move():
d, s = map(int, input().split())
di, dj = DD[d]
for i in range(len(clouds)):
ci, cj = clouds[i]
si = check_over(ci+di*s)
sj = check_over(cj+dj*s)
clouds[i] = (si, sj)
def check_over(n):
while n < 0: n += N
while n >= N: n -= N
return n
def rain():
for ci, cj in clouds:
mat[ci][cj] += 1
def copy_water():
for ci, cj in clouds:
cnt_around = count_around(ci, cj)
mat[ci][cj] += cnt_around
def count_around(i, j):
cnt_around = 0
for di, dj in ((-1,-1),(-1,1),(1,-1),(1,1)):
si, sj = i+di, j+dj
if not (0<=si<N and 0<=sj<N): continue
if not mat[si][sj]: continue
cnt_around += 1
return cnt_around
def make_cloud(clouds):
new_clouds = []
clouds_set = set(clouds)
for i in range(N):
for j in range(N):
if (i, j) in clouds_set: continue
if mat[i][j] < 2: continue
mat[i][j] -= 2
new_clouds.append((i, j))
return new_clouds
def count_mat():
cnt = 0
for i in range(N):
for j in range(N):
cnt += mat[i][j]
return cnt
N, M = map(int, input().split())
DD = [(0,0),(0,-1),(-1,-1),(-1,0),(-1,1),(0,1),(1,1),(1,0),(1,-1)]
mat = [list(map(int, input().split())) for _ in range(N)]
clouds = [(N-1,0),(N-1,1),(N-2,0),(N-2,1)]
for _ in range(M):
move()
rain()
copy_water()
clouds = make_cloud(clouds)
return count_mat()
print(main())
๋๋ฆ ๋นก๋นกํ ๊ตฌํ์ด ํ์ํ ๋ฌธ์ ์์ง๋ง ๋จ๊ณ์ ์ผ๋ก ์ ๊ทผํ๋ฉด ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ์๋ค. ํจ์์ ์ญํ ์ ๊ตฌ๋ถํ์ฌ ์ฒ ์ ํ๊ฒ ์์ ๋จ์๋ก ์๋ผ ์์ฑํ๋ค.
- ์
๋ ฅ์ ๋ฐ์ 2์ฐจ์ ๋ฐฐ์ด
mat
์ ๋ง๋ ๋ค. ๋ฌผ์ ์์ ๊ธฐ๋กํ๋ ๊ฒฉ์๊ฐ ๋ ๊ฒ์ด๋ค. - ์ต์ด์ ๊ตฌ๋ฆ์ ์ผ์ชฝ ํ๋จ 2x2 ํฌ๊ธฐ์ ๊ตฌ๋ฆ์ด๋ฏ๋ก
clouds
๋ณ์๋ฅผ ๋์ด ๊ตฌ๋ฆ์ ๊ฐ ์ขํ๋ฅผ ์ ์ฅํ๋ค. M
ํ์ ๋ฐ๋ณต์ ํ๋ ๊ฒ์ ์ผ๋์ ๋๊ณ for๋ฌธ์ ๋๋ค.- ๊ตฌ๋ฆ์ ์ด๋์ํค๋
move
ํจ์๋ฅผ ์์ฑํ๋ค. ์ด๋ ๋ฐฉํฅ๊ณผ ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ ๋ ฅ ๋ฐ๊ณ , ํด๋น ์ด๋๋ฐฉํฅ ์ธ๋ฑ์ค๋ฅผDD
๋ฐฐ์ด์์ ์ฐพ์di
,dj
๋ฅผ ๊ตฌํ๋ค. clouds
๋ด๋ถ ์ขํ๋ค๋ง๋ค ์ด๋์ํจ ๋ค, ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ค๋ฉด ๋ฒ์ ๋ด๋ก ์ขํ๋ฅผ ์ฌ์กฐ์ ํ๋ ํจ์check_over
๋ฅผ ๋ง๋ค์ด ์ขํ๋ฅผ ์ฌ์กฐ์ ์ฒ๋ฆฌํ์ฌclouds
๋ณ์์ ๊ฐ ์ขํ๋ฅผ ์ฒ๋ฆฌํ๋ค. ์ฆ, ๊ตฌ๋ฆ์ ์ฎ๊ธฐ๋ ๊ฒ์ด๋ค.- ์์ฑ๋ ๊ตฌ๋ฆ๋ง๋ค ๋น๋ฅผ ๋ด๋ ค
mat
์ ๊ฐ ์ขํ์ 1์ ์ถ๊ฐํ๋ ํจ์rain
์ ์์ฑํ๋ค. - ๋ฌผ ๋ณต์ฌ๋ฅผ ํ๋
copy_water
ํจ์๋ฅผ ์์ฑํ๋ค. ๊ตฌ๋ฆ์ ๊ฐ ์ขํ๋ง๋ค ์ฃผ๋ณ์ ํ์ธํ๋ ํจ์count_around
ํจ์๋ฅผ ์์ฑํ์ฌ ๋๊ฐ์ 4๊ฐ์ ์ขํ๋ก๋ถํฐ ์ถ๊ฐํ ๋ฐ๊ตฌ๋์ ๋ฌผ์ ์์ ๊ณ์ฐํ์ฌ ์ถ๊ฐํ๋ค. count_around
ํจ์๋ ๊ฒฉ์๋ฅผ ๋ฒ์ด๋๊ฑฐ๋ ๊ฐ์ด ์์ผ๋ฉด ์นด์ดํธ๋ฅผ ์ถ๊ฐํ์ง ์์ผ๋ฏ๋ก 2๊ฐ์ง ์ํฉ์ ์ ์ธํ ๋๋จธ์ง์์๋ ์นด์ดํธ๋ฅผ ์ถ๊ฐํ๋ค. ์ด๋ฅผ 4๊ฐ ์ขํ ๋ชจ๋ ํ์ธํ์ฌ ๋ฐํํ๋ค.- ๊ตฌ๋ฆ์ ๋ค์ ๋ง๋๋ ํจ์
make_cloud
ํจ์๋ฅผ ์์ฑํ๋ค. NxN์ ์ ์ฒด ์ขํ๋ฅผ ๋ชจ๋ ์์ ํ์ํ๋๋ฐ, ๋ฌธ์ ์กฐ๊ฑด ์ค ๊ธฐ์กด์ ๊ตฌ๋ฆ์ด ์ฌ๋ผ์ง, ์ฆclouds
์ ์๋ ์ขํ์์๋ ๊ตฌ๋ฆ์ด ์๊ธฐ๋ฉด ์ ๋๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ํ์ธํ๋ค. ์ด ์ค 2๊ฐ ๋๋ ๋ชจ๋ ์นธ์new_clouds
์ ๋ด์ ๋ค, ๋ชจ๋ ์์ ํ์์ ๋ง์น๋ฉด ์ด๋ฅผ ๋ฐํํ๋ค. main
ํจ์ ๋ด์clouds
๋ฅผ ์์new_clouds
๋ก ๋์ฒดํ๋ค. ์ด๋ฅผ Mํ ๋ฐ๋ณตํ๋ค.- ๋ชจ๋ ๋ฐ๋ณต์ ์ฒ๋ฆฌํ
mat
์ ๊ฐ ์ขํ์ ๊ฐ์ ๋ชจ๋ ๋์ ํด ๋ฐํํ๋ ํจ์count_mat
์ ์์ฑํ๋ค. main
ํจ์์ return๊ฐ์ ์ถ๋ ฅํ๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ