[프로그래머스] 리코쳇 로봇(파이썬)

서봉성·2023년 7월 14일
0

코딩테스트

목록 보기
27/27

문제

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

풀이방법

  1. bfs를 이용하여 풀어야하므로 deque선언
  2. 만약 답을 구할 수 없는 경우 -1을 출력해야하므로 방문변수 선언
  3. 미끄러지는 경우의 수는 while을 이용하여 벽을 부딪히기 전까지 이동하는 방법을 사용하였다.

코드

from collections import deque

def solution(board):
    answer=-1
    xlen=len(board[0])
    ylen=len(board)
    visits = [[0]*(xlen) for _ in range(ylen)]
    
    dx = [1, -1, 0, 0]
    dy = [0, 0, 1, -1]
    
    dq=deque()
    
    for i in range(ylen):
        for j in range(xlen):
            if board[i][j]=='R':
                print(i, j)
                dq.append([i, j, 0])
                break
    
    while dq:
        y, x, cnt=dq.popleft()
        
        if visits[y][x]==1:
            continue
        
        visits[y][x]=1
        if board[y][x]=='G':
            answer=cnt
            break
        
        for i in range(4):
            xx=x
            yy=y
            while 0<=xx+dx[i] and xx+dx[i]<xlen and 0<=yy+dy[i] and yy+dy[i]<ylen:
                print(xx+dx[i], yy+dy[i])
                if board[yy+dy[i]][xx+dx[i]]!='D':
                    xx+=dx[i]
                    yy+=dy[i]
                else:
                    break
            dq.append([yy, xx, cnt+1])
        
        
    
    
    
    return answer

🎋회고

나는 분명히 완벽한 코드를 짰다고 생각했는데 인덱스 범위 오류가 떠서 그것만 15분 찾아다녔다. 결국 마지막에 yy, xx, cnt+1을 추가해야하는것을 xx, yy, cnt+1로 해버리는 바람에 생겼다. 좀 더 꼼꼼히 풀 필요가 있겠다.

profile
OverStudy

0개의 댓글