๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/2636)
<์น์ฆ>
๋ฌธ์
์๋ <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ์ด ์ ์ฌ๊ฐํ ์นธ๋ค๋ก ์ด๋ฃจ์ด์ง ์ฌ๊ฐํ ๋ชจ์์ ํ์ด ์๊ณ , ๊ทธ ์์ ์์ ์น์ฆ(ํ์์ผ๋ก ํ์๋ ๋ถ๋ถ)๊ฐ ๋์ฌ ์๋ค. ํ์ ๊ฐ์ฅ์๋ฆฌ(<๊ทธ๋ฆผ 1>์์ ๋ค๋ชจ ์นธ์ X ์น ๋ถ๋ถ)์๋ ์น์ฆ๊ฐ ๋์ฌ ์์ง ์์ผ๋ฉฐ ์น์ฆ์๋ ํ๋ ์ด์์ ๊ตฌ๋ฉ์ด ์์ ์ ์๋ค.
์ด ์น์ฆ๋ฅผ ๊ณต๊ธฐ ์ค์ ๋์ผ๋ฉด ๋ น๊ฒ ๋๋๋ฐ ๊ณต๊ธฐ์ ์ ์ด๋ ์นธ์ ํ ์๊ฐ์ด ์ง๋๋ฉด ๋ น์ ์์ด์ง๋ค. ์น์ฆ์ ๊ตฌ๋ฉ ์์๋ ๊ณต๊ธฐ๊ฐ ์์ง๋ง ๊ตฌ๋ฉ์ ๋๋ฌ์ผ ์น์ฆ๊ฐ ๋ น์์ ๊ตฌ๋ฉ์ด ์ด๋ฆฌ๋ฉด ๊ตฌ๋ฉ ์์ผ๋ก ๊ณต๊ธฐ๊ฐ ๋ค์ด๊ฐ๊ฒ ๋๋ค. <๊ทธ๋ฆผ 1>์ ๊ฒฝ์ฐ, ์น์ฆ์ ๊ตฌ๋ฉ์ ๋๋ฌ์ผ ์น์ฆ๋ ๋ น์ง ์๊ณ ‘c’๋ก ํ์๋ ๋ถ๋ถ๋ง ํ ์๊ฐ ํ์ ๋ น์ ์์ด์ ธ์ <๊ทธ๋ฆผ 2>์ ๊ฐ์ด ๋๋ค.
๋ค์ ํ ์๊ฐ ํ์๋ <๊ทธ๋ฆผ 2>์์ ‘c’๋ก ํ์๋ ๋ถ๋ถ์ด ๋ น์ ์์ด์ ธ์ <๊ทธ๋ฆผ 3>๊ณผ ๊ฐ์ด ๋๋ค.
<๊ทธ๋ฆผ 3>์ ์๋ ์น์ฆ์ ๋ ์๊ฐ ํ ๋ชจ์์ ๋ํ๋ด๊ณ ์์ผ๋ฉฐ, ๋จ์ ์กฐ๊ฐ๋ค์ ํ ์๊ฐ์ด ๋ ์ง๋๋ฉด ๋ชจ๋ ๋ น์ ์์ด์ง๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ฒ์ ์น์ฆ๊ฐ ๋ชจ๋ ๋ น์ ์์ด์ง๋ ๋ฐ๋ ์ธ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. <๊ทธ๋ฆผ 3>๊ณผ ๊ฐ์ด ์น์ฆ๊ฐ ๋ น๋ ๊ณผ์ ์์ ์ฌ๋ฌ ์กฐ๊ฐ์ผ๋ก ๋๋์ด์ง ์๋ ์๋ค.
์ ๋ ฅ์ผ๋ก ์ฌ๊ฐํ ๋ชจ์์ ํ์ ํฌ๊ธฐ์ ํ ์กฐ๊ฐ์ ์น์ฆ๊ฐ ํ ์์ ์ฃผ์ด์ก์ ๋, ๊ณต๊ธฐ ์ค์์ ์น์ฆ๊ฐ ๋ชจ๋ ๋ น์ ์์ด์ง๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ๊ณผ ๋ชจ๋ ๋ น๊ธฐ ํ ์๊ฐ ์ ์ ๋จ์์๋ ์น์ฆ ์กฐ๊ฐ์ด ๋์ฌ ์๋ ์นธ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์๋ ์ฌ๊ฐํ ๋ชจ์ ํ์ ์ธ๋ก์ ๊ฐ๋ก์ ๊ธธ์ด๊ฐ ์์ ์ ์๋ก ์ฃผ์ด์ง๋ค. ์ธ๋ก์ ๊ฐ๋ก์ ๊ธธ์ด๋ ์ต๋ 100์ด๋ค. ํ์ ๊ฐ ๊ฐ๋ก์ค์ ๋ชจ์์ด ์ ์ค๋ถํฐ ์ฐจ๋ก๋ก ๋์งธ ์ค๋ถํฐ ๋ง์ง๋ง ์ค๊น์ง ์ฃผ์ด์ง๋ค. ์น์ฆ๊ฐ ์๋ ์นธ์ 0, ์น์ฆ๊ฐ ์๋ ์นธ์ 1๋ก ์ฃผ์ด์ง๋ฉฐ ๊ฐ ์ซ์ ์ฌ์ด์๋ ๋น์นธ์ด ํ๋์ฉ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์๋ ์น์ฆ๊ฐ ๋ชจ๋ ๋ น์์ ์์ด์ง๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ถ๋ ฅํ๊ณ , ๋์งธ ์ค์๋ ๋ชจ๋ ๋ น๊ธฐ ํ ์๊ฐ ์ ์ ๋จ์์๋ ์น์ฆ ์กฐ๊ฐ์ด ๋์ฌ ์๋ ์นธ์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
- my solution (Python)
import sys
from collections import deque
def cheese(arr, queue, visited, cheese_temp):
dx=[-1,1,0,0]
dy=[0,0,-1,1]
while queue:
temp=queue.popleft()
for i in range(4):
x=temp[0]+dx[i]
y=temp[1]+dy[i]
if x>=0 and x<len(arr) and y>=0 and y<len(arr[0]): # ํ ๋ฒ์ ์
if arr[x][y]==0 and visited[x][y]==0: # ์น์ฆ x, ๋ฐฉ๋ฌธ x
queue.append([x,y])
visited[x][y]=1
elif arr[x][y]==1 and visited[x][y]==0: # ์น์ฆ - ๊ณต๊ธฐ
cheese_temp.append([x,y])
visited[x][y]=1
return cheese_temp
if __name__=='__main__':
x,y=map(int,sys.stdin.readline().split())
arr=[]
for i in range(x):
arr.append(list(map(int, sys.stdin.readline().split())))
visited=[[0]*y for i in range(x)] # ๋ฐฉ๋ฌธ
day=0 # ์๊ฐ
cheese_temp = deque([])
queue=deque([[0,0]])
cheese_cnt=len(cheese(arr, queue, visited, cheese_temp))
while cheese_temp:
day+=1
cheese_temp=cheese(arr,cheese_temp, visited, deque([]))
if len(cheese_temp)!=0:
cheese_cnt=len(cheese_temp)
print(day) # ์๊ฐ
print(cheese_cnt) # ๋ชจ๋ ๋
น๊ธฐ ํ ์๊ฐ ์ ์ ๋จ์์๋ ์น์ฆ ์กฐ๊ฐ ์
- my solution (JAVA)
โ
- cheese ( ์น์ฆ ์ ๋ณด, queue, ๋ฐฉ๋ฌธ, ๋
น์ ์น์ฆ)
: dx, dy = ์ํ์ข์ฐ ์ด๋
: queue๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต -> ์ ์ผ ์ฒ์ ๊ฐ์ pop -> ์ํ์ข์ฐ ์ด๋ํ์ฌ ํ ๋ฒ์ ์์ด๋ฉด -> ์น์ฆ๊ฐ ์๊ณ ์์ง ๋ฐฉ๋ฌธํ์ง ์์์ผ๋ฉด queue์ ์ถ๊ฐ ๋ฐ ๋ฐฉ๋ฌธ ํ์ but ์น์ฆ๊ฐ ์๊ณ ์์ง ๋ฐฉ๋ฌธํ์ง ์์์ผ๋ฉด ๊ณต๊ธฐ์ ๋ฟ์ธ ๊ฒ์ด๋ฏ๋ก cheese_temp์ ์ถ๊ฐ ๋ฐ ๋ฐฉ๋ฌธ ํ์
: cheese_temp ๋ฐํ - x, y = ํ์ ์ธ๋ก, ๊ฐ๋ก๊ธธ์ด ์ ๋ ฅ
- arr = ํ์ ์ ๋ณด
- visited = ๋ฐฉ๋ฌธ ์ฌ๋ถ
- day = ์๊ฐ
- cheese_temp = ๋ น์ ์น์ฆ
- cheese_cnt = ์๊ฐ๋ง๋ค ์น์ฆ ์กฐ๊ฐ ๋์ฌ ์๋ ์นธ์ ๊ฐ์
- cheese_temp ๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต -> day +1 -> ํจ์ ํธ์ถํ์ฌ ๋ฐํ ๊ฐ ์ ์ฅ ๋ฐ cheese_cnt์ cheese_temp ๊ธธ์ด ์ ์ฅ
- day, cheese cnt ์ถ๋ ฅ
โ ์ฒ์์ ์ ํ๋ ธ๋๊ฐ?
1์๊ฐ ๋ง์ ์น์ฆ๊ฐ ๋ค ๋ น์ ์์ด์ง ๊ฒฝ์ฐ ํ ์๊ฐ ์ ์ ๋จ์์๋ ์น์ฆ ์กฐ๊ฐ์ด ๋์ฌ์๋ ๊ฐ์๋ฅผ ์ ์ฅํ์ง ์์๊ธฐ ๋๋ฌธ์ ํ๋ ธ์๋ค.
์๊ฐ๐ค
๋๊ฐ์ด ๊ตฌํํ ๊ฒ ๊ฐ์๋ฐ ์ JAVA๋ก๋ ๋ต์ด ์ ๋์ค์ง..?
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 12851_์จ๋ฐ๊ผญ์ง 2 (0) | 2022.04.18 |
---|---|
[Baekjoon] 16948_๋ฐ์ค ๋์ดํธ (0) | 2022.04.15 |
[Baekjoon] 16928_๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ ๊ฒ์ (0) | 2022.04.12 |
[Baekjoon] 5014_์คํํธ๋งํฌ (0) | 2022.04.08 |
[Baekjoon] 11403_๊ฒฝ๋ก ์ฐพ๊ธฐ (0) | 2022.04.07 |