1. ๋ฌธ์ ์ค๋ช
- ์
๋ ฅ
- ์ฒซ์งธ ์ค์ ์์ฐ์ N, K๊ฐ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง
- ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ฑธ์ณ์ ์ํ๊ด์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง : ์กด์ฌํ๋ ๋ฐ์ด๋ฌ์ค์ ๋ฒํธ๊ฐ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ์ฃผ์ด์ง, ๋จ, ํด๋น ์์น์ ๋ฐ์ด๋ฌ์ค๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ 0์ด ์ฃผ์ด์ง ( ๋ชจ๋ ๋ฐ์ด๋ฌ์ค์ ๋ฒํธ๋ K์ดํ์ ์์ฐ์)
- N+2๋ฒ์งธ ์ค์๋ S, X, Y๊ฐ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง
- ์ถ๋ ฅ : S์ด ๋ค์ (X,Y)์ ์กด์ฌํ๋ ๋ฐ์ด๋ฌ์ค์ ์ข ๋ฅ๋ฅผ ์ถ๋ ฅ, ๋ง์ฝ S์ด ๋ค์ ํด๋น ์์น์ ๋ฐ์ด๋ฌ์ค๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด, 0์ ์ถ๋ ฅ
2. ์ฝ๋
solution1.py
from collections import deque
import sys
input = sys.stdin.readline
N,K = map(int, input().split())
graph = []
data = [] # ๋ฐ์ด๋ฌ์ค์ข
๋ฅ ์ ์ฅ
for i in range(N):
graph.append(list(map(int, input().split())))
for j in range(N):
#ํด๋น ์์น์ ๋ฐ์ด๋ฌ์ค๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ
if graph[i][j] !=0:
#๋ฐ์ด๋ฌ์ค์ข
๋ฅ, ์ด, ์์น x, ์์น y
data.append((graph[i][j],0,i,j))
data.sort()
#ex1 : deque([(1, 0, 0, 0), (2, 0, 0, 2), (3, 0, 2, 0)])
q = deque(data)
target_s, target_x, target_y = map(int, input().split()) #์ด, ์์น x, ์์น y
#์ํ์ข์ฐ
dx = [0, 0, -1, 1]
dy = [1, -1, 0, 0]
while q:
virus, s, x, y = q.popleft()
#s์ด๊ฐ ์ง๋๊ฑฐ๋, ํ๊ฐ ๋น๋๊น์ง ๋ฐ๋ณต
if s == target_s:
break
#ํ์ฌ ๋
ธ๋์์ 4๊ฐ์ง ์์น๋ฅผ ๊ฐ๊ฐ ํ์ธ
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
#ํด๋น ์์น๋ก ์ด๋ํ ์ ์๋ ๊ฒฝ์ฐ
if 0 <= nx and nx < N and 0 <=ny and ny < N:
#์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์์น๋ผ๋ฉด, ๊ทธ ์์น์ ๋ฐ์ด๋ฌ์ค ๋ฃ๊ธฐ
if graph[nx][ny] == 0:
graph[nx][ny] = virus
q.append((virus, s+1, nx,ny))
print(graph[target_x -1][target_y -1])
3. ํ๊ณ
Q. ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ๋ ์๊ฐ
- ์ ๊ณต๋ ์ํ๊ด ์ ๋ณด๋ฅผ bfs๋ฅผ ์ ์ฉํ๋ ค๋ฉด ์ด๋ค ๋ฐฉ์์ผ๋ก ์ ์ฅํด์ผํ์ง? ์ธ์ ๋ฆฌ์คํธ ํํ๋ก ์ ์ฅํ๊ธฐ์ ์ด๋ ค์ด ๊ฒ ๊ฐ์๋ฐ...
- 2์ฐจ์ ๋ฆฌ์คํธ์ ๊ทธ๋ฅ ๋ด์ผ๋ฉด ๋จ!
- ๋ชจ๋ ๊ฐ์ ์ ๋น์ฉ์ด 1์ด๊ธฐ ๋๋ฌธ์ BFS๋ฅผ ํตํ ์ต๋จ๊ฑฐ๋ฆฌ ๊ณ์ฐ์ด ๊ฐ๋ฅ
- BFS๋ก ํ๊ธฐ๋ก ๊ฒฐ์
Q. ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ๋ฉด์ ๋ค์๋ ์๋ฌธ์ ๋ค
- ์ด๋ป๊ฒ ์์ ๋ฐ์ด๋ฌ์ค๊ฐ ์์น๋ฅผ ์ ์ ์ ํ๋์ง?
- ๋ฐ์ด๋ฌ์ค๊ฐ ๋ฎ์ ๋ฒํธ๋ถํฐ ์ฆ์ํ๊ธฐ ๋๋ฌธ์ ํ์ ๋ฎ์ ๋ฒํธ์ ๋ฐ์ด๋ฌ์ค๋ถํฐ ๋ฃ์ด์ฃผ๊ธฐ๋ง ํ๋ฉด ์๋์ผ๋ก BFS๋ฅผ ์ํ ์์ ๋ฎ์ ๋ฒํธ๋ถํฐ ์ฆ์ํ๋ ๋ฐฉ์์ด ์ ์ฉ๊ฐ๋ฅํ๋ค.
- ํ์์ ๊บผ๋ผ๋ ์์๋?
- ์ฒ์์ ๋ฐ์ด๋ฌ์ค๊ฐ ์๋ ๊ณณ ์์น๋ฅผ ์์๋๋ก ๊บผ๋
- ๊ทธ ํ์๋ ์๋กญ๊ฒ ์ ๋ฐ์ดํธ ๋ ๊ณณ์์์ (๋ฐ์ด๋ฌ์ค, ์ด,x,y)๋ฅผ ํ์ ๋ฃ๊ณ , ์กด์ฌํ๋ ๋ฐ์ด๋ฌ์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ์ํ์ข์ฐ๋ฅผ ๋ค ํ์ํ ํ์๋ ์๋กญ๊ฒ ๋ฃ์ (๋ฐ์ด๋ฌ์ค, ์ด,x,y)๋ฅผ ๊บผ๋
- ๊ทธ๋ ๋ค๋ฉด ์ ์ด๋ฏธ ์กด์ฌํ๋ ๊ณณ(0์ด ์๋ ๊ณณ)์ ํ์ ๋ฃ์ด์ฃผ์ง ์์๋๊ฐ?
- ??? (๋ฏธํด๊ฒฐ)
- ์๊ฐ์ ์ด๋ป๊ฒ count?
- ํ์ ์๊ฐ์ ๋ณด๋ฅผ ์ ์ฅํด๋๊ณ , ์ ์ฅํด๋ ๊ฐ ๋ฐ์ด๋ฌ์ค๋ ์ด๊ธฐ์๊ฐ์ด 0, ์๋กญ๊ฒ ์ ๋ฐ์ดํธํ๋ ๋ ธ๋๊ฐ ๋ฐ์ํ๋ฉด +1ํด์ ์๊ฐ ์ ๋ฐ์ดํธ ํ, ํ์ ๋ฃ์ด์ค๋ค.
- ์ด๋ ๊ฒ ํ๋ฉด ํ์์ ๊บผ๋์ ๋, ํด๋น ๋ ธ๋๋ ์๊ฐ์ด ์ฆ๊ฐํ ์ํ, ์ข ๋ฅ์กฐ๊ฑด์ ํ์ธํ๋๋ฐ ๋์
- ์ข ๋ฃ์กฐ๊ฑด?
- ํ์์ ์๋ก์ด ๋ ธ๋๋ฅผ ๊บผ๋๋๋ฐ, ๊ทธ๊ฒ ๋ง์ฝ S์ด๋ผ๋ฉด ๊ฑฐ๊ธฐ๊น์ง๋ง ์งํํ๊ณ ๊ทธ ์ดํ ์งํ์ ๋ง์์ผํ๋ฏ๋ก, break
- ๋ง์ฝ ์ฃผ์ด์ง S์ด ์ ์ ํ ์์ ๊ฐ์ด ๋์ด์ ์กด์ฌํ์ง ์์๋ break, ์ํ๋ ์๊ฐ ์ด์ ์ ์ด๋ฏธ ๋ชจ๋ ์ํ๊ด์ ๋ฐ์ด๋ฌ์ค๊ฐ ์ ์ผ๋์๊ธฐ ๋๋ฌธ์, ๊ทธ ์ํ์์ ๊ฒฐ๊ณผ๋ฅผ ํ์
4. ์ฐธ๊ณ
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] #14502 ์ฐ๊ตฌ์ (Python) (0) | 2022.01.21 |
---|---|
[๋ฐฑ์ค] #1260 DFS์ BFS (Python) (0) | 2022.01.19 |
[๋ฐฑ์ค] #18352 ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ (Python) (0) | 2022.01.18 |
[๋ฐฑ์ค] #15922 ์์ฐ์ผ ์ฐ์์ผ์ด์ผ!! (Python) (0) | 2021.05.18 |
[๋ฐฑ์ค] #2529 ๋ถ๋ฑํธ (Python) (0) | 2021.05.18 |