[BOJ][๐ก4][๋ฐฑ์ค#20056] ๋ง๋ฒ์ฌ ์์ด์ ํ์ด์ด๋ณผ
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold IV
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
์ด๋ฅธ ์์ด๊ฐ ๋ง๋ฒ์ฌ๊ฐ ๋์๊ณ , ํ์ด์ด๋ณผ์ ๋ฐฐ์ ๋ค. ๋ง๋ฒ์ฌ ์์ด๊ฐ ํฌ๊ธฐ๊ฐ NรN์ธ ๊ฒฉ์์ ํ์ด์ด๋ณผ M๊ฐ๋ฅผ ๋ฐ์ฌํ๋ค. ๊ฐ์ฅ ์ฒ์์ ํ์ด์ด๋ณผ์ ๊ฐ์ ์์น์์ ์ด๋์ ๋๊ธฐํ๊ณ ์๋ค. i๋ฒ ํ์ด์ด๋ณผ์ ์์น๋ (ri, ci), ์ง๋์ mi์ด๊ณ , ๋ฐฉํฅ์ di, ์๋ ฅ์ si์ด๋ค. ์์น (r, c)๋ rํ c์ด์ ์๋ฏธํ๋ค. ๊ฒฉ์์ ํ๊ณผ ์ด์ 1๋ฒ๋ถํฐ N๋ฒ๊น์ง ๋ฒํธ๊ฐ ๋งค๊ฒจ์ ธ ์๊ณ , 1๋ฒ ํ์ N๋ฒ๊ณผ ์ฐ๊ฒฐ๋์ด ์๊ณ , 1๋ฒ ์ด์ N๋ฒ ์ด๊ณผ ์ฐ๊ฒฐ๋์ด ์๋ค. ํ์ด์ด๋ณผ์ ๋ฐฉํฅ์ ์ด๋ค ์นธ๊ณผ ์ธ์ ํ 8๊ฐ์ ์นธ์ ๋ฐฉํฅ์ ์๋ฏธํ๋ฉฐ, ์ ์๋ก๋ ๋ค์๊ณผ ๊ฐ๋ค.
7 0 1
6 ย 2
5 4 3
๋ง๋ฒ์ฌ ์์ด๊ฐ ๋ชจ๋ ํ์ด์ด๋ณผ์๊ฒ ์ด๋์ ๋ช ๋ นํ๋ฉด ๋ค์์ด ์ผ๋ค์ด ์ผ์ด๋๋ค.
๋ชจ๋ ํ์ด์ด๋ณผ์ด ์์ ์ ๋ฐฉํฅ di๋ก ์๋ ฅ si์นธ ๋งํผ ์ด๋ํ๋ค.
์ด๋ํ๋ย ์ค์๋ ๊ฐ์ ์นธ์ ์ฌ๋ฌ ๊ฐ์ ํ์ด์ด๋ณผ์ด ์์ ์๋ ์๋ค.
์ด๋์ด ๋ชจ๋ ๋๋ ๋ค, 2๊ฐ ์ด์์ ํ์ด์ด๋ณผ์ด ์๋ ์นธ์์๋ ๋ค์๊ณผ ๊ฐ์ ์ผ์ด ์ผ์ด๋๋ค.
๊ฐ์ ์นธ์ ์๋ ํ์ด์ด๋ณผ์ ๋ชจ๋ ํ๋๋ก ํฉ์ณ์ง๋ค. ํ์ด์ด๋ณผ์ 4๊ฐ์ ํ์ด์ด๋ณผ๋ก ๋๋์ด์ง๋ค. ๋๋์ด์ง ํ์ด์ด๋ณผ์ ์ง๋, ์๋ ฅ, ๋ฐฉํฅ์ ๋ค์๊ณผ ๊ฐ๋ค.
์ง๋์ย โ(ํฉ์ณ์ง ํ์ด์ด๋ณผ ์ง๋์ ํฉ)/5โ์ด๋ค. ์๋ ฅ์ย โ(ํฉ์ณ์ง ํ์ด์ด๋ณผ ์๋ ฅ์ ํฉ)/(ํฉ์ณ์ง ํ์ด์ด๋ณผ์ ๊ฐ์)โ์ด๋ค. ํฉ์ณ์ง๋ ํ์ด์ด๋ณผ์ ๋ฐฉํฅ์ด ๋ชจ๋ ํ์์ด๊ฑฐ๋ ๋ชจ๋ ์ง์์ด๋ฉด, ๋ฐฉํฅ์ 0, 2, 4, 6์ด ๋๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด 1, 3, 5, 7์ด ๋๋ค.
์ง๋์ด 0์ธ ํ์ด์ด๋ณผ์ ์๋ฉธ๋์ด ์์ด์ง๋ค.
๋ง๋ฒ์ฌ ์์ด๊ฐ ์ด๋์ K๋ฒ ๋ช ๋ นํ ํ, ๋จ์์๋ ํ์ด์ด๋ณผ ์ง๋์ ํฉ์ ๊ตฌํด๋ณด์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N, M, K๊ฐ ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์ ํ์ด์ด๋ณผ์ ์ ๋ณด๊ฐ ํ ์ค์ ํ๋์ฉ ์ฃผ์ด์ง๋ค. ํ์ด์ด๋ณผ์ ์ ๋ณด๋ ๋ค์ฏ ์ ์ ri, ci, mi, si, di๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ์๋ก ๋ค๋ฅธ ๋ ํ์ด์ด๋ณผ์ ์์น๊ฐ ๊ฐ์ ๊ฒฝ์ฐ๋ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง์ง ์๋๋ค.
์ถ๋ ฅ
๋ง๋ฒ์ฌ ์์ด๊ฐ ์ด๋์ K๋ฒ ๋ช ๋ นํ ํ, ๋จ์์๋ ํ์ด์ด๋ณผ ์ง๋์ ํฉ์ ์ถ๋ ฅํ๋ค.
์ ํ
4 โค N โค 50 0 โค M โค N2 1 โค K โค 1,000 1 โค ri, ci โค N 1 โค mi โค 1,000 1 โค si โค 1,000 0 โค di โค 7
์์
์์ 1
์ ๋ ฅ
4 2 1
1 1 5 2 2
1 4 7 1 6
์ถ๋ ฅ
8
์์ 2
์ ๋ ฅ
4 2 2
1 1 5 2 2
1 4 7 1 6
์ถ๋ ฅ
8
์์ 3
์ ๋ ฅ
4 2 3
1 1 5 2 2
1 4 7 1 6
์ถ๋ ฅ
0
์์ 4
์ ๋ ฅ
7 5 3
1 3 5 2 4
2 3 5 2 6
5 2 9 1 7
6 2 1 3 5
4 4 2 4 2
์ถ๋ ฅ
9
My Sol
def replace(k):
global N
if k < 0:
while k < 0:
k += N
if k >= N:
while k >= N:
k -= N
return k
def move():
global N, mat, tog, t, direction
for i in range(N):
for j in range(N):
while mat[i][j][t]:
m, d, s = mat[i][j][t].pop()
di, dj = direction[d]
si, sj = replace(i+di*s), replace(j+dj*s)
if not (0<=si<N and 0<=sj<N): continue
mat[si][sj][tog[t]].append([m, d, s])
t^=1
def union_and_divide():
global N, mat, t, direction
multi_fireball = [[0]*N for _ in range(N)]
for i in range(N):
for j in range(N):
dir = 1
fireball_cnt = len(mat[i][j][t])
if fireball_cnt > 1:
multi_fireball[i][j] = 1
while mat[i][j][t]:
m, d, s = mat[i][j][t].pop()
if not mat[i][j][t]: break
std_dir = mat[i][j][t][0][1]
if std_dir%2 != d%2: dir = 0
mat[i][j][t][0][0] += m
mat[i][j][t][0][2] += s
if not fireball_cnt: continue
if multi_fireball[i][j]:
new_m = m//5
if new_m:
new_s = s//fireball_cnt
for k in range(1-dir, 8, 2):
mat[i][j][tog[t]].append([new_m, k, new_s])
else:
mat[i][j][tog[t]].append([m, d, s])
t^=1
direction = {
0: (-1, 0),
1: (-1, 1),
2: (0, 1),
3: (1, 1),
4: (1, 0),
5: (1, -1),
6: (0, -1),
7: (-1, -1)
}
t = 0
tog = {1:0, 0:1}
N, M, K = map(int, input().split())
mat = [[[[], []] for _ in range(N)] for _ in range(N)]
for _ in range(M):
r, c, mass, speed, direc = map(int, input().split())
mat[r-1][c-1][t].append([mass, direc, speed])
for _ in range(K):
move()
union_and_divide()
# ์นด์ดํธ
ret = 0
for i in range(N):
for j in range(N):
while mat[i][j][0]:
m, d, s = mat[i][j][0].pop()
ret += m
print(ret)
๋ค์ฐจ์์ ํ์ฉํด์ผ ํ๋ ๊ตฌํ ๋ฌธ์ ์๋ค. ์ ์ฐจ๋๋ก ํ๋ฉด ์ด๋ ต์ง ์์ผ๋, ๋ฌธ์ ์์ ๊ฐ๋ณ๊ฒ ์ค๋ช ํ๊ณ ์ง๋๋ ๋ถ๋ถ์ด ๊ฒฐ์ ์ ์ธ ์์ธ์ด ๋ง์ ์์ธํ ์ ์ฝ์ด๋ณด์์ผ ํ ์ ์์๋ค.
- ์ ๋ ฅ์ ๋ฐ์ ์ฒ๋ฆฌํ๋๋ฐ, 2์ฐจ์ ๋ฐฐ์ด mat์ toggle ์ธ์ t์ ๋ฐ๋ฅธ 0, 1์ ์ค๊ณ ๊ฐ์ ์ํ์ฌ ๋น ๋ฐฐ์ด 2๊ฐ๊ฐ ์๋ 1์ฐจ์ ๋ฐฐ์ด์ mat์ ๊ฐ ์์ญ๋ง๋ค ์ฑ์๋ฃ์ด ์ด๊ธฐํํ๋ค. ์ฆ, 3์ฐจ์ ๋ฐฐ์ด์ด๋ค.
- K๋ฒ ๊ฐ์ ํจํด์ ๋ฐ๋ณตํ๋ฏ๋ก ๊ฑฑ์ ์์ด K๋งํผ for๋ฌธ์ ๋๋ฆฌ๋๋ฐ, ํ์ด์ด๋ณผ์ด ์์ง์ด๋
move
ํจ์๊ณผ ์์ง์ธ ํ์ด์ด๋ณผ๋ค์ด ํฉ์ณ์ง๊ณ , 2๊ฐ ์ด์์ด๋ผ๋ฉด ๋๋์ด์ง๋union_and_divide
ํจ์๋ฅผ ์์ฑํ๋ค. - ํ์ด์ด๋ณผ๋ค์ ๋ฐฉํฅ์ ๋ฐ๋ผ di, dj๋ฅผ ๊ฒฐ์ ํ ์ ์๋๋ก direction dictionary๋ฅผ ๋ฏธ๋ฆฌ ๋๊ณ ,
move
ํจ์์์๋ ํ์ด์ด๋ณผ๋ค๋ง๋ค direction dictionary์์ ๋ฐฉํฅ ๋ฒกํฐ๋ฅผ, ๊ทธ๋ฆฌ๊ณ ์๋๋ฅผ ์ฌ๊ธฐ์ ๊ณฑํด ํ์ฌ ์์น์ ๋ํ์ฌ ์ต์ข ์ด๋ ์์น๋ฅผ ๊ฒฐ์ ํ๋ค. - ์ฌ๊ธฐ์ ์ค์ํ ์ ์ด 2๊ฐ์ง ์๋๋ฐ, ์ฒซ์งธ๋ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ํ์ด์ด๋ณผ์ ๋ค์ ๊ตฌ์ญ ์์ผ๋ก ๋ค์ด์์ผ ํ๋ฏ๋ก, ํฌ๊ธฐ์ ๋ฐ๋ผ N์ ๋ํ๊ฑฐ๋ ๋นผ์ฃผ๋
replace
ํจ์๋ฅผ ๋ง๋ค์ด ์ด๋ ์์น๋ฅผ ์กฐ์ ํด์ฃผ์๋ค. ๋์งธ๋ ๊ธฐ์กด ์กฐํํ๋ fireball๋ค์ t๊ฐ 0์์ ํ์ธํ๋๋ฐ, ์๋กญ๊ฒ ์ด๋ํ๋ fireball์ 3์ฐจ์ ์ถ์ด 1์ธ ์ง์ ์ ๋์ด์ผ ํ๋ค. ๊ทธ๋์ผ ์ดํ์ move๋ฅผ ์ํ for๋ฌธ์์ ์ด๋ฏธ ์ด๋ํ fireball์ด ์กฐํ๋ฅผ ํผํ ์ ์๋ค. ์ด๊ฒ์ด mat์ 3์ฐจ์ ๋ฐฐ์ด๋ก ๋ง๋ ์ด์ ์ด๋ค. - ์ดํ 3์ฐจ์ ์ถ์ด 1์ธ ์ง์ ์ ์กฐํํ๋ฉฐ ์ด๋๋ ํ์ด์ด๋ณผ๋ค์ ์กฐํํ๋๋ฐ, ๊ฐ ์์น์์ ํ์ด์ด๋ณผ์ด 2๊ฐ ์ด์์ด๋ผ๋ฉด ๋ฐฉํฅ๊ณผ ๋ฌด๊ฒ, ์๋๋ฅผ ๋์ ๋ฐ ํ์ธํ์ฌ ํ๋๋ก ๋ชจ์์ค๋ค.
- ๋ง์ฝ ๊ธฐ์กด์ ํ์ด์ด๋ณผ์ด ์์๋ค๋ฉด ๊ทธ๋ฅ ๋์ด๊ฐ๊ณ , 1๊ฐ๋ง ์์๋ค๋ฉด 3์ฐจ์ ์ถ์ด 0์ธ ์ง์ ์ผ๋ก ํ์ด์ด๋ณผ์ ๋ณด๋ด์ฃผ๋ฉฐ, 2๊ฐ ์ด์์ด์๋ค๋ฉด 3์ฐจ์ ์ถ์ด 0์ธ ์ง์ ์ผ๋ก ํ์ฌ ํฉ์ณ์ง ํ์ด์ด๋ณผ์ 4์กฐ๊ฐ์ผ๋ก ์ชผ๊ฐ ๋ชจ๋ ๋ฃ์ด์ค๋ค.
- ์ด๋ ์ค์ํ ์ ์ ์ง๊ธ ๋ณด๋ด๋ ๊ฒ์ด ์๋๋ผ, ํ์ฌ ์์น์ 4๊ฐ์ ํ์ด์ด๋ณผ์ด ๋จ์์๋ ๊ฒ์ด๋ฉฐ, ๋ค์ move์์ ๊ฐ๊ฐ์ ํ์ด์ด๋ณผ์ด ์ฌ๋ฐฉ์ผ๋ก ํผ์ ธ๋๊ฐ๋ ๊ฒ์ด๋ค. ์ด๊ฒ์ ํ์ฌ ํด์ ํด์ฃผ์ง ์์์ผ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๋ค.
- ๋ชจ๋ K๋ฅผ ๋ง์น๋ค๋ฉด mat์ ์ ์ฒด ํฝ์ ์ ์์ ํ์ํ๋ฉฐ 3์ฐจ์ ์ถ์ด 0์ธ ๋ฐฐ์ด์ fireball๋ค ๊ฐ 0๋ฒ ์ธ๋ฑ์ค ๊ฐ์ ๋ชจ๋ ๋ํ์ฌ ์ถ๋ ฅํ๋ฉด ๋๋ค.
์ ํํ๋ mat์ fireball(1์ฐจ์)์ ์งํฉ(2์ฐจ์)์ด 2๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ์๋(3์ฐจ์) ๊ฒ๋ค์ด NxN๋งํผ(2์ฐจ์) ์์ผ๋ฏ๋ก 5์ฐจ์์ ๊ณ์ฐ์ด ํ์ํ์ง๋ง, ์ฌ์ค ํฌ๊ธฐ๊ฐ ๊ทธ๋ฆฌ ํฌ์ง ์๊ณ ์ฐจ์์ ๋ํ ๊ณ์ฐ์ด ๋ง์ง ์์ ์ด๋ฐ ๋ถ๋ถ์์๋ ํฐ ์ด๋ ค์์ด ์๋ค.
ํ์ง๋ง fireball์ด ๋๋์ด์ง ๋ ํ์ฌ ํด์์๋ ํ์ฌ ์์น์ ๋จ์์๋ค๋ ๊ฒ์ด ์ค๋ต์ ํผํ๋ ๋ฐ์ ์ค์ํ ํคํฌ์ธํธ๊ฐ ๋๊ฒ ๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋ชจ๋ฒ๋ต์
# empty
๋๊ธ๋จ๊ธฐ๊ธฐ