본문 바로가기

프로그래머스 퀴즈(Python)/level 2

23.04.18 파이썬 코딩 퀴즈#227 리코쳇 로봇(프로그래머스 스쿨)

이버 문제는 리코쳇 로봇 문제이다.

리코쳇 로봇은 보드게임의 일종으로, 격자모양의 보드 위에서 말을 움직이며 최소 몇 번 만에 시작 위치에서 목표 위치까지 도달할 수 있는지 말하는 게임이다.

이 게임에서 말은 상,하,좌,우 하나를 선택해서 움직이게 되며, 장애물이나 맨 끝에 부딪힐 때까지 미끄러져 이동하는 것을 한 번의 이동으로 한다.

게임의 설명을 잘 이해해야 한다. 보드의 끝이나 장애물에 부딪히지 않는다면 로봇은 멈추지 않는다.

즉 도착지점 G 의 사방이 막혀있거나, 사방이 뚫려있다면 절대 도달 할 수 없음을 의미한다.

(예외로 G의 한 부분이 벽이라면 도달 가능하다.)

주어진 board를 확인하여 말이 목표위치에 도달하는데 최소 몇 번 이동해야 하는지를 return 해야 하며, 만약 도달할 수 없다면 -1을 return 해야 한다.

별다른 특이사항은 없다. board 의 최대 길이는 100x100 이다.

입출력 예 1번은 위 그림 설명과 같다.

입출력 예 2번은 G 의 사방이 뚫려있기 때문에 어떻게 움직여도 G에 도달 할 수 없다. 따라서 -1 이 된다.

코드는 미로찾기 게임이랑 거의 비슷한 코드를 사용하였다. 다만 이 경우에는 while문을 사용하여 최대한 이동하여 "D"와 만나게 되면 멈춘다. 보드를 확장하여 "D"로 모든 외벽을 둘렀기 때문에 인덱스 에러는 걱정 안해도 된다.

 

비슷한 코드로 작성한것 같지만 간혹 시간 초과가 나는 경우가 있는데, 

1. 방문처리를 안한 경우

2. 방문처리를 하였지만 방문한 지점에서 다시 상,하,좌,우를 탐색하는 경우 

 

이 두가지의 경우는 피해야 한다.

2번의 경우에는 조건문에 의해 이미 방문한 지점이라면 continue 를 통해 건너띄어 주는게 좋을것 같다.