๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด/DFS,BFS

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]๋ฏธ๋กœํƒˆ์ถœ

by syLim___ 2023. 6. 23.
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