Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

우주에서 글을 적어본다

99클럽 코테 스터디33일차 TIL + BFS 본문

항해99 TIL

99클럽 코테 스터디33일차 TIL + BFS

우주로 날아간 사람 2024. 8. 23. 21:06

[오늘의 학습 키워드 및 문제]
- 프로그래머스의 "리코쳇 로봇" 문제를 풀었다.
- 오늘 주제는 BFS이다.
- 저번 문제보다 조건이 하나 늘어났다.

[나의 코드]

from collections import deque

def solution(board):
    n, m = len(board), len(board[0])
    visited = [[False] * m for _ in range(n)]
    dx = [-1, 0, 1, 0]
    dy = [0, 1, 0, -1]
    
    def bfs(x, y):
        q = deque()
        q.append((x, y, 0))
        visited[x][y] = True
        
        while q:
            x, y, dist = q.popleft()
            
            if board[x][y] == 'G':
                return dist
            
            for i in range(4):
                nx, ny = x, y
                
                while 0 <= nx + dx[i] < n and 0 <= ny + dy[i] < m and board[nx + dx[i]][ny + dy[i]] != 'D':
                    nx += dx[i]
                    ny += dy[i]
                
                if not visited[nx][ny]:
                    visited[nx][ny] = True
                    q.append((nx, ny, dist + 1))
                    
        return -1 
    
    for i in range(n):
        for j in range(m):
            if board[i][j] == 'R':
                return bfs(i, j)
    
    return -1

장애물을 만날 때까지 이동해야 하는 것이므로 그 부분을 추가해 줬다.
나머지는 다른 BFS 코드와 거의 같다.

[오늘의 회고]
- 내일 시험이 있어서 여기서 줄인다.ㅠㅠㅠ 끝!