본문 바로가기

카테고리 없음

파이썬)리코쳇 로봇- 프로그래머스

https://school.programmers.co.kr/learn/courses/30/lessons/169199

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

from collections import deque

def solution(board):
    answer = 0
    R = len(board)
    C = len(board[0])
    rx, ry = 0, 0
    for i in range(R):
        for j in range(C):
            if board[i][j]=='R':
                rx, ry = i, j
                
    dx = [-1, 1, 0, 0]
    dy = [0, 0, -1, 1]
    
    def bfs():
        q = deque()
        q.append((rx, ry))
        visited = [[0]*C for _ in range(R)]
        visited[rx][ry] = 1
        
        while q:
            px, py = q.popleft()
            if board[px][py] == 'G':
                return visited[px][py]
            for i in range(4):
                nx, ny = px, py
                while True:
                    nx, ny = nx+dx[i], ny+dy[i]
                    if 0<=nx<R and 0<=ny<C and board[nx][ny]=='D':
                        nx -= dx[i]
                        ny -= dy[i]
                        break
                    if nx<0 or nx>=R or ny<0 or ny>=C:
                        nx -= dx[i]
                        ny -= dy[i]
                        break
                if not visited[nx][ny]:
                    visited[nx][ny] = visited[px][py] + 1
                    q.append((nx, ny))
        return -1
                    
    answer = bfs()
    if answer > 0:
        answer -= 1
        
    return answer