728x90
https://school.programmers.co.kr/learn/courses/30/lessons/159993#
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
python
from collections import deque
def solution(maps):
answer = 0
row = len(maps)
col = len(maps[0])
# ์ถ๋ฐ์ , ๋ ๋ฒ, ์ถ๊ตฌ ์์น ์ฐพ๊ธฐ
q = deque()
sx, sy, lx, ly, ex, ey = 0,0,0,0,0,0
for i in range(row):
if "S" in maps[i]:
sx = i
sy = maps[i].index("S")
if "L" in maps[i]:
lx = i
ly = maps[i].index("L")
if "E" in maps[i]:
ex = i
ey = maps[i].index("E")
dx = [-1,0,1,0]
dy = [0,1,0,-1]
# ์ถ๋ฐ์ -> ๋ ๋ฒ bfs
visited = [[0 for j in range(col)] for i in range(row)]
count = [[0 for j in range(col)] for i in range(row)]
q.append((sx,sy))
while q:
x, y = q.popleft()
if visited[x][y] == 1:
continue
visited[x][y] = 1
if maps[x][y] == "L":
break
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0<=nx<row and 0<=ny<col:
if maps[nx][ny] != "X":
q.append((nx,ny))
count[nx][ny] = count[x][y] + 1
cnt = count[lx][ly]
if cnt == 0:
return -1
# visited, count ์ด๊ธฐํ
for i in range(row):
for j in range(col):
visited[i][j] = 0
count[i][j] = 0
# q ์ด๊ธฐํ
q.clear()
# ๋ ๋ฒ -> ์ถ๊ตฌ bfs
q.append((lx,ly))
while q:
x, y = q.popleft()
if visited[x][y] == 1:
continue
visited[x][y] = 1
if maps[x][y] == "E":
break
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0<=nx<row and 0<=ny<col:
if maps[nx][ny] != "X":
q.append((nx,ny))
count[nx][ny] = count[x][y] + 1
cnt += count[ex][ey]
if visited[ex][ey] == 0:
return -1
return cnt
728x90
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด > DFS,BFS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค]1926๋ฒ: ๊ทธ๋ฆผ (0) | 2023.07.16 |
---|---|
[๋ฐฑ์ค]14940๋ฒ: ์ฌ์ด ์ต๋จ๊ฑฐ๋ฆฌ (0) | 2023.07.03 |
[softeer] ์ฅ์ ๋ฌผ ์ธ์ ํ๋ก๊ทธ๋จ (0) | 2023.05.16 |
[๋ฐฑ์ค]7562๋ฒ: ๋์ดํธ์ ์ด๋ (0) | 2023.03.20 |
[๋ฐฑ์ค]14502๋ฒ: ์ฐ๊ตฌ์ (1) | 2023.03.11 |