[BOJ][๐ก1][๋ฐฑ์ค#17143] ๋์์
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold I
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
๋์์์ด ์์ด ๋์๋ฅผ ํ๋ ๊ณณ์ ํฌ๊ธฐ๊ฐ RรC์ธ ๊ฒฉ์ํ์ผ๋ก ๋ํ๋ผ ์ ์๋ค. ๊ฒฉ์ํ์ ๊ฐ ์นธ์ (r, c)๋ก ๋ํ๋ผ ์ ์๋ค. r์ ํ, c๋ ์ด์ด๊ณ , (R, C)๋ ์๋ ๊ทธ๋ฆผ์์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋์ ์๋ ์นธ์ด๋ค.ย ์นธ์๋ ์์ด๊ฐ ์ต๋ ํ ๋ง๋ฆฌ ๋ค์ด์์ ์ ์๋ค. ์์ด๋ ํฌ๊ธฐ์ ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
๋์์์ ์ฒ์์ 1๋ฒ ์ด์ ํ ์นธ ์ผ์ชฝ์ ์๋ค. ๋ค์์ 1์ด ๋์ ์ผ์ด๋๋ ์ผ์ด๋ฉฐ, ์๋ ์ ํ ์์๋๋ก ์ผ์ด๋๋ค. ๋์์์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์ด์ ์ค๋ฅธ์ชฝ ์นธ์ ์ด๋ํ๋ฉดย ์ด๋์ ๋ฉ์ถ๋ค.
๋์์์ด ์ค๋ฅธ์ชฝ์ผ๋ก ํ ์นธ ์ด๋ํ๋ค. ๋์์์ด ์๋ ์ด์ ์๋ ์์ด ์ค์์ ๋ ๊ณผ ์ ์ผ ๊ฐ๊น์ด ์์ด๋ฅผ ์ก๋๋ค. ์์ด๋ฅผ ์ก์ผ๋ฉด ๊ฒฉ์ํ์์ ์ก์ ์์ด๊ฐ ์ฌ๋ผ์ง๋ค. ์์ด๊ฐ ์ด๋ํ๋ค.
์์ด๋ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์๋๋ก ์ด๋ํ๊ณ , ์๋์ ๋จ์๋ ์นธ/์ด์ด๋ค. ์์ด๊ฐ ์ด๋ํ๋ ค๊ณ ํ๋ ์นธ์ด ๊ฒฉ์ํ์ ๊ฒฝ๊ณ๋ฅผ ๋๋ ๊ฒฝ์ฐ์๋ ๋ฐฉํฅ์ ๋ฐ๋๋ก ๋ฐ๊ฟ์ ์๋ ฅ์ ์ ์งํ์ฑ๋ก ์ด๋ํ๋ค. ์ผ์ชฝ ๊ทธ๋ฆผ์ ์ํ์์ 1์ด๊ฐ ์ง๋๋ฉด ์ค๋ฅธ์ชฝ ์ํ๊ฐ ๋๋ค. ์์ด๊ฐ ๋ณด๊ณ ์๋ ๋ฐฉํฅ์ด ์๋์ ๋ฐฉํฅ, ์ผ์ชฝ ์๋์ ์ ํ ์ ์๋ ์๋ ฅ์ด๋ค.ย ์ผ์ชฝ ์์ ์์ด๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด ๋ฌธ์๋ฅผ ์ ์๋ค.
์์ด๊ฐ ์ด๋์ ๋ง์น ํ์ ํ ์นธ์ ์์ด๊ฐ ๋ ๋ง๋ฆฌ ์ด์ ์์ ์ ์๋ค. ์ด๋๋ ํฌ๊ธฐ๊ฐ ๊ฐ์ฅ ํฐ ์์ด๊ฐ ๋๋จธ์ง ์์ด๋ฅผ ๋ชจ๋ ์ก์๋จน๋๋ค. ๋์์์ด ์์ด ๋์๋ฅผ ํ๋ ๊ฒฉ์ํ์ ์ํ๊ฐ ์ฃผ์ด์ก์ ๋, ๋์์์ด ์ก์ย ์์ด ํฌ๊ธฐ์ ํฉ์ ๊ตฌํด๋ณด์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๊ฒฉ์ํ์ ํฌ๊ธฐ R, C์ ์์ด์ ์ M์ด ์ฃผ์ด์ง๋ค. (2ย โค R, C โค 100, 0 โค M โคย RรC) ๋์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์ ์์ด์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. ์์ด์ ์ ๋ณด๋ ๋ค์ฏย ์ ์ r, c, s, d, z (1 โค r โค R, 1 โค c โค C, 0 โค s โค 1000, 1 โค d โค 4, 1 โค z โค 10000)ย ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. (r, c)๋ ์์ด์ ์์น, s๋ ์๋ ฅ, d๋ ์ด๋ ๋ฐฉํฅ, z๋ ํฌ๊ธฐ์ด๋ค. d๊ฐ 1์ธ ๊ฒฝ์ฐ๋ ์, 2์ธ ๊ฒฝ์ฐ๋ ์๋, 3์ธ ๊ฒฝ์ฐ๋ ์ค๋ฅธ์ชฝ, 4์ธ ๊ฒฝ์ฐ๋ ์ผ์ชฝ์ ์๋ฏธํ๋ค. ๋ ์์ด๊ฐ ๊ฐ์ ํฌ๊ธฐ๋ฅผ ๊ฐ๋ ๊ฒฝ์ฐ๋ ์๊ณ , ํ๋์ ์นธ์ ๋ ์ด์์ ์์ด๊ฐ ์๋ ๊ฒฝ์ฐ๋ ์๋ค.
์ถ๋ ฅ
๋์์์ด ์ก์ ์์ด ํฌ๊ธฐ์ ํฉ์ ์ถ๋ ฅํ๋ค.
์์
์์ 1
์ ๋ ฅ
4 6 8
4 1 3 3 8
1 3 5 2 9
2 4 8 4 1
4 5 0 1 4
3 3 1 2 7
1 5 8 4 3
3 6 2 1 2
2 2 2 3 5
์ถ๋ ฅ
22
์์ 2
์ ๋ ฅ
100 100 0
์ถ๋ ฅ
0
์์ 3
์ ๋ ฅ
4 5 4
4 1 3 3 8
1 3 5 2 9
2 4 8 4 1
4 5 0 1 4
์ถ๋ ฅ
22
์์ 4
์ ๋ ฅ
2 2 4
1 1 1 1 1
2 2 2 2 2
1 2 1 2 3
2 1 2 1 4
์ถ๋ ฅ
4
My Sol
import sys
input = sys.stdin.readline
def main():
def place_sharks():
sharks = {}
for m in range(M):
i, j, s, d, z = map(int, input().split())
mat[i-1][j-1].append((z, s, d, m))
sharks[m] = (i-1, j-1, z, s, d)
return sharks
def hunt_shark():
size = 0
for i in range(I):
if not mat[i][kj]: continue
z, s, d, m = mat[i][kj].pop()
sharks[m] = ()
sharks_nums.remove(m)
size = z
break
return size
def move_sharks():
new_sharks = {}
for m in sharks_nums:
i, j, z, s, d = sharks[m]
mat[i][j].pop()
ni, nj, nd = move_shark(i, j, s, d)
new_sharks[m] = (ni, nj, z, s, nd)
return new_sharks
def move_shark(i, j, s, d):
if not s:
return i, j, d
di, dj = DD[d]
if di:
return move_vertical(i, j, s, d)
else:
return move_horizontal(i, j, s, d)
def move_vertical(i, j, s, d):
di, dj = DD[d]
s = s%((I-1)*2)
while True:
si = i+di*s
if 0<=si<I: return si, j, d
move_i = I-1-i if di > 0 else i
i = i+move_i if di > 0 else i-move_i
s -= move_i
di *= -1
d = RD[d]
def move_horizontal(i, j, s, d):
di, dj = DD[d]
s = s%((J-1)*2)
while True:
sj = j+dj*s
if 0<=sj<J: return i, sj, d
move_j = J-1-j if dj > 0 else j
j = j+move_j if dj > 0 else j-move_j
s -= move_j
dj *= -1
d = RD[d]
def fill_sharks():
for m in sharks_nums:
i, j, z, s, d = sharks[m]
if not mat[i][j]:
mat[i][j].append((z, s, d, m))
else:
if mat[i][j][0][0] > z:
remove_sharks_set.add(m)
else:
rm = mat[i][j][0][3]
remove_sharks_set.add(rm)
mat[i][j].pop()
mat[i][j].append((z, s, d, m))
def remove_sharks():
for rm in remove_sharks_set:
remove_shark(rm)
remove_sharks_set.clear()
def remove_shark(m):
sharks_nums.remove(m)
sharks[m] = ()
I, J, M = map(int, input().split())
mat = [[[] for _ in range(J)] for _ in range(I)]
sharks = place_sharks()
sharks_nums = set(range(M))
remove_sharks_set = set()
RD = {1:2, 2:1, 3:4, 4:3}
DD = {1:(-1,0), 2:(1,0), 3:(0,1), 4:(0,-1)}
ret = 0
for kj in range(J):
ret += hunt_shark()
sharks = move_sharks()
fill_sharks()
remove_sharks()
return ret
print(main())
๊ฝค๋ ๋ณต์กํ๋ ๊ตฌํ ๋ฌธ์ ์๋ค. ํ์ง๋ง ๋จ๊ณ๋ณ๋ก ์ ๋ชจ๋ํํด์ ํํผํ๋ค๋ฉด ์ด๋ ต์ง ์๊ฒ ํ์ด๋ผ ์ ์์๋ค.
- ์
๋ ฅ์ ๋ฐ๋๋ค. ์์ด๋ค์ ์ด๊ธฐ ์์น๋ฅผ ๋ฐ๋
place_sharks
ํจ์๋ฅผ ์์ฑํดmat
2์ฐจ์ ๋ฐฐ์ด์ ์์ด ์ ๋ณด๋ฅผ ๋ฐฐ์นํจ์ ๋ฌผ๋ก , ์์ด ๋ฒํธ๋ค์ ์ง์ ํsharks
set์ ๋์๋ค. ์ด sharks set์ ์ ๋ณด๋ค์ ๋ฐํ์ผ๋ก ํ์ ๋จ์shark
๋ค์ ์ด๋์ ๋งค๋ฒ ํด์ฃผ๊ฒ ๋ ๊ฒ์ด๋ค. - ๋์๊พผ์ด ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋น ์ด๋ํ๋ ๊ฒ์ for๋ฌธ์์ค ์์ฑํ์๋ค. ๊ฐ ์ด๋ง๋ค ๊ฐ์ฅ ์์ ์๋ ์์ด๋ฅผ ์ ๊ฑฐํ๊ณ ๊ทธ ํฌ๊ธฐ๋ฅผ ๋ฐํํ๋ ํจ์
hunt_shark
ํจ์๋ฅผ ์์ฑํ์๊ณ , ์ด๋ฅผ ์ต์ข ๊ฒฐ๊ณผ๊ฐ์ธret
์ ๋ํด์ฃผ์๋ค. - ์ดํ ๊ฐ ์์ด๋ง๋ค ์์ง์ฌ์ฃผ๋ ํจ์
move_sharks
ํจ์๋ฅผ ์์ฑํ์๋๋ฐ, ์์ด๋ง๋ค ๋ฐฉํฅ์ ๋ฐ๊พธ๊ณ ์ ๋ณด๋ฅผ ์ฌ์กฐ์ ํด์ฃผ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์์ด๋น ์ด๋์ ํ๋move_shark
ํจ์๋ฅผ ์์ฑํ์๊ณ , ์ด๋ ๋ค์ ์ด๋ ๋ฐฉํฅ์ ๋ฐ๋ผmove_vertical
๊ณผmove_horizontal
๋ก ๋๋์ด ๋ฒ์๋ฅผ ๋ฒ์ด๋ฌ๋์ง ํ์ธํ๋ฉฐ ์ต์ข ์ด๋ ์ขํ๋ฅผ ํ์ ํ๋ค. - ์์ด๋ค์ ๊ฐ ์ด๋ ํ ์ ๋ณด๋ค์ ๊ณ์ฐํ ๋ค
fill_sharks
ํจ์๋ฅผ ํตํด ๋น์์งmat
2์ฐจ์ ๋ฐฐ์ด์ ๋ฃ์ด์ฃผ์๋ค. ์ด ๊ณผ์ ์์ ์์ด๊ฐ ๊ฒน์น๋ค๋ฉด ํฌ๊ธฐ๊ฐ ํฐ ์์ด๋ง ๋จ๊ฒจ์ฃผ์ด์ผ ํ๋ค. ๊ทธ๋ฐ๋ฐ set์ ์ํํ๋ ๊ณผ์ ์์ set์ ํฌ๊ธฐ๊ฐ ๋ฌ๋ผ์ง๋ฉด ์ ๋๊ธฐ ๋๋ฌธ์main
์remove_sharks_set
set์ ๋์ด์ ์ ๊ฑฐํด์ผ ํ๋ ์์ด ๋ฒํธ๋ฅผ ๋ฃ์ด์ฃผ์๋ค. - ์ดํ
remove_sharks
ํจ์๋ฅผ ํตํด ์ ๊ฑฐ ๋์ ์์ด์ ์ ๋ณด๋ฅผsharks
์์ ์ง์ ๋ค. - ๋ชจ๋ ๊ณผ์ ์์
sharks
dictionary์sharks_nums
set์ด ์๋๋ฐ, ์ฒ์ ์์ด์ ๊ฐ ์ ๋ณด๋ง๋ค ๋ฒํธ๋ฅผ ๋งค๊ฒจ ์ ๊ฑฐ๋๊ฑฐ๋ ์ฌ๋ฅ๋นํ ์์ด๋ ์ ๋ณด๋ฅผ ์ง์์ฃผ๋ ๋ฑ์ ๊ณผ์ ์ ๊ฑฐ์น๋ค. ์ด ๊ณผ์ ์์ ํธ์๋ฅผ ์ํด index ์ฐธ์กฐ dictionary์ set์ ๋ฐ๋ก ๋ ๊ฒ์ด๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ