09009
[프로그래머스 lv2] 리코쳇 로봇 본문
문제 보기
https://school.programmers.co.kr/learn/courses/30/lessons/169199
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 해결
문제를 읽었는데 도대체 무슨 소리인지 모르겠다. 문제 자체를 이해 못해서 결국 다른 사람 풀이를 참고했다.
소스 코드
from collections import deque
def solution(board):
answer = 0
m, n = len(board), len(board[0])
rx, ry = 0, 0
dx = [0,0,-1,1]
dy = [-1,1,0,0]
for i in range(m):
for j in range(n):
if board[i][j] == 'R':
rx, ry = i, j
visited = [[0]*n for _ in range(m)]
def bfs(x,y):
q = deque()
q.append((x,y))
visited[x][y] = 1
while q:
x, y = q.popleft()
if board[x][y] == 'G':
return visited[x][y]
for i in range(4):
nx, ny = x, y
while True:
nx, ny = nx + dx[i], ny + dy[i]
if 0 <= nx < m and 0 <= ny < n and board[nx][ny]=='D':
nx -= dx[i]
ny -= dy[i]
break
if nx < 0 or nx >= m or ny < 0 or ny >= n:
nx -= dx[i]
ny -= dy[i]
break
if not visited[nx][ny]:
visited[nx][ny] = visited[x][y] + 1
q.append((nx, ny))
return -1
answer = bfs(rx, ry)
if answer > 0:
answer -= 1
return answer
'Algorithm > BFS DFS' 카테고리의 다른 글
[백준 1260] DFS와 BFS (0) | 2023.12.21 |
---|---|
좌표가 뒤집어진 문제가 나올 경우 해결방법 (0) | 2023.10.18 |
[프로그래머스 lv2] 미로 탈출 (0) | 2023.10.11 |
[프로그래머스 lv3] 단어 변환 (0) | 2023.10.06 |
[백준 11724번] 연결 요소의 개수 (0) | 2023.09.29 |
Comments