๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/16236)
<์๊ธฐ ์์ด>
๋ฌธ์
N×N ํฌ๊ธฐ์ ๊ณต๊ฐ์ ๋ฌผ๊ณ ๊ธฐ M๋ง๋ฆฌ์ ์๊ธฐ ์์ด 1๋ง๋ฆฌ๊ฐ ์๋ค. ๊ณต๊ฐ์ 1 ×1 ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค. ํ ์นธ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์ต๋ 1๋ง๋ฆฌ ์กด์ฌํ๋ค.
์๊ธฐ ์์ด์ ๋ฌผ๊ณ ๊ธฐ๋ ๋ชจ๋ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ์ด ํฌ๊ธฐ๋ ์์ฐ์์ด๋ค. ๊ฐ์ฅ ์ฒ์์ ์๊ธฐ ์์ด์ ํฌ๊ธฐ๋ 2์ด๊ณ , ์๊ธฐ ์์ด๋ 1์ด์ ์ํ์ข์ฐ๋ก ์ธ์ ํ ํ ์นธ์ฉ ์ด๋ํ๋ค.
์๊ธฐ ์์ด๋ ์์ ์ ํฌ๊ธฐ๋ณด๋ค ํฐ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ์นธ์ ์ง๋๊ฐ ์ ์๊ณ , ๋๋จธ์ง ์นธ์ ๋ชจ๋ ์ง๋๊ฐ ์ ์๋ค. ์๊ธฐ ์์ด๋ ์์ ์ ํฌ๊ธฐ๋ณด๋ค ์์ ๋ฌผ๊ณ ๊ธฐ๋ง ๋จน์ ์ ์๋ค. ๋ฐ๋ผ์, ํฌ๊ธฐ๊ฐ ๊ฐ์ ๋ฌผ๊ณ ๊ธฐ๋ ๋จน์ ์ ์์ง๋ง, ๊ทธ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ์นธ์ ์ง๋๊ฐ ์ ์๋ค.
์๊ธฐ ์์ด๊ฐ ์ด๋๋ก ์ด๋ํ ์ง ๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
๋ ์ด์ ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ๊ณต๊ฐ์ ์๋ค๋ฉด ์๊ธฐ ์์ด๋ ์๋ง ์์ด์๊ฒ ๋์์ ์์ฒญํ๋ค.
๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ 1๋ง๋ฆฌ๋ผ๋ฉด, ๊ทธ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์ผ๋ฌ ๊ฐ๋ค.
๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ 1๋ง๋ฆฌ๋ณด๋ค ๋ง๋ค๋ฉด, ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์ผ๋ฌ ๊ฐ๋ค.
๊ฑฐ๋ฆฌ๋ ์๊ธฐ ์์ด๊ฐ ์๋ ์นธ์์ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ์นธ์ผ๋ก ์ด๋ํ ๋, ์ง๋์ผ ํ๋ ์นธ์ ๊ฐ์์ ์ต์๊ฐ์ด๋ค.
๊ฑฐ๋ฆฌ๊ฐ ๊ฐ๊น์ด ๋ฌผ๊ณ ๊ธฐ๊ฐ ๋ง๋ค๋ฉด, ๊ฐ์ฅ ์์ ์๋ ๋ฌผ๊ณ ๊ธฐ, ๊ทธ๋ฌํ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์ฌ๋ฌ ๋ง๋ฆฌ๋ผ๋ฉด, ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๋๋ค.
์๊ธฐ ์์ด์ ์ด๋์ 1์ด ๊ฑธ๋ฆฌ๊ณ , ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์๋ค๊ณ ๊ฐ์ ํ๋ค. ์ฆ, ์๊ธฐ ์์ด๊ฐ ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ์นธ์ผ๋ก ์ด๋ํ๋ค๋ฉด, ์ด๋๊ณผ ๋์์ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๋๋ค. ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์ผ๋ฉด, ๊ทธ ์นธ์ ๋น์นธ์ด ๋๋ค.
์๊ธฐ ์์ด๋ ์์ ์ ํฌ๊ธฐ์ ๊ฐ์ ์์ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์ ๋๋ง๋ค ํฌ๊ธฐ๊ฐ 1 ์ฆ๊ฐํ๋ค. ์๋ฅผ ๋ค์ด, ํฌ๊ธฐ๊ฐ 2์ธ ์๊ธฐ ์์ด๋ ๋ฌผ๊ณ ๊ธฐ๋ฅผ 2๋ง๋ฆฌ ๋จน์ผ๋ฉด ํฌ๊ธฐ๊ฐ 3์ด ๋๋ค.
๊ณต๊ฐ์ ์ํ๊ฐ ์ฃผ์ด์ก์ ๋, ์๊ธฐ ์์ด๊ฐ ๋ช ์ด ๋์ ์๋ง ์์ด์๊ฒ ๋์์ ์์ฒญํ์ง ์๊ณ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ก์๋จน์ ์ ์๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๊ณต๊ฐ์ ํฌ๊ธฐ N(2 ≤ N ≤ 20)์ด ์ฃผ์ด์ง๋ค.
๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ณต๊ฐ์ ์ํ๊ฐ ์ฃผ์ด์ง๋ค. ๊ณต๊ฐ์ ์ํ๋ 0, 1, 2, 3, 4, 5, 6, 9๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ์๋์ ๊ฐ์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค.
0: ๋น์นธ
1, 2, 3, 4, 5, 6: ์นธ์ ์๋ ๋ฌผ๊ณ ๊ธฐ์ ํฌ๊ธฐ
9: ์๊ธฐ ์์ด์ ์์น
์๊ธฐ ์์ด๋ ๊ณต๊ฐ์ ํ ๋ง๋ฆฌ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์๊ธฐ ์์ด๊ฐ ์๋ง ์์ด์๊ฒ ๋์์ ์์ฒญํ์ง ์๊ณ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ก์๋จน์ ์ ์๋ ์๊ฐ์ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
- my solution (Python)
import sys
from collections import deque
def baby_shark(arr, shark, shark_size,n):
dx=[-1,1,0,0]
dy=[0,0,-1,1]
visited=[[0]*n for i in range(n)] # ๋ฐฉ๋ฌธ ์ฌ๋ถ
depth = [[0] * n for i in range(n)] # ๊ฑฐ๋ฆฌ
visited[shark[0]][shark[1]]=1
queue=deque([shark])
while queue:
temp=queue.popleft()
for i in range(4):
x=temp[0]+dx[i]
y=temp[1]+dy[i]
if 0<=x<n and 0<=y<n:
if arr[x][y]<=shark_size and visited[x][y]==0:
visited[x][y]=1
depth[x][y]=depth[temp[0]][temp[1]]+1
queue.append([x,y])
return depth
def main():
n=int(input()) # ๊ณต๊ฐ์ ํฌ๊ธฐ
arr=[]
for i in range(n):
arr.append(list(map(int,sys.stdin.readline().split())))
shark_size=2 # ์ฒ์ ํฌ๊ธฐ
for i in range(n): # ์ฒ์ ์์น
for j in range(n):
if arr[i][j]==9:
shark=[i,j]
arr[i][j]=0
result=0
eat_num=0 # ๋จน์ ๋ฌผ๊ณ ๊ธฐ ์
while True:
eat = [] # ์์ ๋ฌผ๊ณ ๊ธฐ
for i in range(n):
for j in range(n):
if arr[i][j]!=0 and arr[i][j]<shark_size:
eat.append([i,j])
depth=baby_shark(arr, shark, shark_size,n)
min_val=n*n
if len(eat)==0: # ๋ ์ด์ ๋จน์ ์ ์๋ ๊ฒ x
break
flag=False
for i in eat:
if depth[i[0]][i[1]]!=0 and min_val>depth[i[0]][i[1]]: # ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ๊น์ด ๊ฒ ์ฐพ๊ธฐ
flag=True
min_val=depth[i[0]][i[1]]
min_xy=[i[0], i[1]]
if flag==True:
result+=min_val
eat_num+=1
shark=min_xy
arr[shark[0]][shark[1]]=0
else:
break
if eat_num==shark_size: # ์์ ์ ํฌ๊ธฐ์ ๊ฐ์ ์์ ๋ฌผ๊ณ ๊ธฐ ๋จน์๋ ํฌ๊ธฐ +1
shark_size+=1
eat_num=0
print(result)
if __name__=="__main__":
main()
- baby_shark ( ๊ณต๊ฐ์ ์ํ , ์๊ธฐ ์์ด ์์น, ์๊ธฐ ์์ด ํฌ๊ธฐ, ๊ณต๊ฐ์ ํฌ๊ธฐ)
: dx, dy = ์ํ์ข์ฐ
: visited = ๋ฐฉ๋ฌธ ์ฌ๋ถ
: depth = ๊ฑฐ๋ฆฌ
: queue๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต -> ์ ค ์ฒ์ ๊ฐ์ pop -> ์ํ์ข์ฐ ์ด๋ํ์ฌ ๊ณต๊ฐ ๋ฒ์ ์์ด๋ฉฐ ์๊ธฐ ์์ด์ ํฌ๊ธฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๊ณ (์๊ธฐ ์์ด์ ํฌ๊ธฐ๊ฐ ๊ฐ์ผ๋ฉด ์ง๋๊ฐ ์ ์์ผ๋ฏ๋ก) ์์ง ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด -> ๋ฐฉ๋ฌธ ํ์, depth ์ ์ฅ ๋ฐ queue ์ถ๊ฐ
: depth ๋ฐํ - Main
: ๊ณต๊ฐ์ ํฌ๊ธฐ n ์ ๋ ฅ
: ๊ณต๊ฐ์ ์ํ arr ์ ๋ ฅ
: shark_size = ์๊ธฐ ์์ด์ ํฌ๊ธฐ
: shark = ์๊ธฐ ์์ด์ ์ฒ์ ์์น / ์๊ธฐ ์์ด์ ์ฒ์ ์์น๋ฅผ ๊ตฌํ ํ arr์ ์๊ธฐ ์์ด์ ์์น ๊ฐ์ 0์ผ๋ก ์ ์ฅ
: result = ์๊ฐ / eat_num = ๋จน์ ๋ฌผ๊ณ ๊ธฐ ์ / eat = ์๊ธฐ ์์ด๋ณด๋ค ์์ ๋ฌผ๊ณ ๊ธฐ์ ์์น
: ์ข ๋ฃ ์กฐ๊ฑด๊น์ง ๋ฐ๋ณต
-> arr์ ์ํํ์ฌ ์๊ธฐ ์์ด๋ณด๋ค ์์ ๋ฌผ๊ณ ๊ธฐ์ ์์น๋ฅผ eat์ ์ ์ฅ ํ baby_shark ํจ์ ํธ์ถ์ ํตํด ํ์ฌ ์๊ธฐ ์์ด ์์น๋ถํฐ ์ด๋ํ ์ ์๋ ๊ณณ์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํจ -> ๋ง์ฝ ์๊ธฐ ์์ด๋ณด๋ค ์์ ๋ฌผ๊ณ ๊ธฐ๊ฐ ํ๋๋ ์๋ค๋ฉด (eat์ ๊ธธ์ด๊ฐ 0์ด๋ผ๋ฉด) ์ข ๋ฃ but ์๊ธฐ ์์ด๋ณด๋ค ์์ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ค๋ฉด eat ๋ฆฌ์คํธ๋ฅผ ์ํํ์ฌ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ณณ์ ์ฐพ์ -> ๋ง์ฝ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ณณ์ด ์๋ค๋ฉด result์ ๊ฑฐ๋ฆฌ (=์๊ฐ) ์ถ๊ฐ ๋ฐ eat_num +1, ์๊ธฐ ์์ด ์์น ์ ๋ฐ์ดํธ, ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์์ผ๋ฏ๋ก arr์์ ๊ทธ ์นธ์ 0์ผ๋ก ๋ฐ๊ฟ์ค but eat์ ์ ์ฅํ ๊ฐ์ด ์์ง๋ง ๊ทธ ์นธ์ผ๋ก ๊ฐ ์ ์๋ค๋ฉด ๋จน์ ์ ์๋ ๊ฒ์ด๋ฏ๋ก ์ข ๋ฃ -> ๋ฌผ๊ณ ๊ธฐ ๋จน์ ์์ธ eat_num์ด ์๊ธฐ ์์ด์ ํฌ๊ธฐ์ธ shark_size์ ๊ฐ๋ค๋ฉด ์๊ธฐ ์์ด ํฌ๊ธฐ +1
: result ์ถ๋ ฅ
โ ์ ํ๋ ธ๋๊ฐ?
์๊ธฐ ์์ด๋ณด๋ค ์์ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์์ง๋ง ๊ทธ ์์น๋ก ๊ฐ๊ธฐ ์ํ depth๊ฐ 0์ด๋ผ๋ฉด ๊ทธ ์์น๋ก ๊ฐ ์ ์๋ค๋ ๋ป์ด๋ค. ์ด ๋ถ๋ถ์ ๊ตฌํํ๋ ๊ฒ์ ๋์ณ ์ฒ์์ ํ๋ ธ์ต๋๋ค๊ฐ ๋ฐ์ํ์๋ค. ๊ทธ๋์ depth๊ฐ 0์ด ์๋ ๋ min_val๊ณผ min_xy๋ฅผ ๊ตฌํ๋๋ก ๊ตฌํํ์๋ค.
๋ ๋ฒ์งธ๋ ์์ ๋น์ทํ ์ํฉ์ผ๋ก ์๊ธฐ ์์ด๋ณด๋ค ์์ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๊ณ ๊ทธ ์์น๋ก ๊ฐ ์ ์๋ ๊ฒฝ์ฐ์ result, eat_num, shark์์น, arr ์ ๋ณด๋ฅผ ์์ ํ๋๋ก ์๋ก์ด ๋ณ์ flag๋ฅผ ์ ์ธํด์ฃผ์๋ค.
๋ง์ง๋ง์ผ๋ก๋ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฌผ๊ณ ๋ฆฌ๋ฅผ ๊ตฌํ๊ธฐ ์ํด ์ฒ์์ ์ ์ธํด์ค min_val ๊ฐ ๋๋ฌธ์ ํ๋ฆฐ ๊ฒ์ด์๋ค. ์ด ๋ถ๋ถ์์ ์กฐ๊ธ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ ธ๋ค. (0,0)๋ถํฐ (n-1, n-1)๊น์ง ๊ฐ ์ ์์ผ๋ฏ๋ก ์ต๋ ๊ฐ ์ ์๋ ๊ฑฐ๋ฆฌ๋ n*n์ด๋ฏ๋ก min_val์ n*n์ผ๋ก ์ ์ธํด์ฃผ์ด์ผ ํ๋ค.
์๊ฐ๐ค
๋ถ๋ช ๋ฉฐ์น ์ ์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค๊ฐ ๊ทธ๋ง๋ ๊ฒ ๊ฐ์๋ฐ ์๋ฌด๋ฆฌ ์ฐพ์๋ด๋ ์์ฑํ๋ ์ฝ๋๊ฐ ์๋ค..!
๊ทธ๋์ ๊ทธ๋ฅ ๋ค์ ๊ตฌํํ๋ค..!
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 14500_ํ ํธ๋ก๋ฏธ๋ ธ (0) | 2022.05.31 |
---|---|
[Baekjoon] 21608_์์ด ์ด๋ฑํ๊ต (0) | 2022.05.27 |
[Baekjoon] 17086_์๊ธฐ ์์ด 2 (0) | 2022.05.20 |
[Baekjoon] 21610_๋ง๋ฒ์ฌ ์์ด์ ๋น๋ฐ๋ผ๊ธฐ (0) | 2022.05.16 |
[Baekjoon] 14891_ํฑ๋๋ฐํด (0) | 2022.05.12 |