Algorithm & Data Structure/BOJ

[백준] 13460 구슬 탈출 2

남혁준 2019. 12. 27. 17:11

https://www.acmicpc.net/problem/13460

 

13460번: 구슬 탈출 2

첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B' 로 이루어져 있다. '.'은 빈 칸을 의미하고, '#'은 공이 이동할 수 없는 장애물 또는 벽을 의미하며, 'O'는 구멍의 위치를 의미한다. 'R'은 빨간 구슬의 위치, 'B'는 파란 구슬의 위치이다. 입력되는 모든 보드

www.acmicpc.net

bfs문제 였습니다.

문제를 정확히 읽어야 한다는 교훈을 준 문제였습니다.

숫자 0과 영어  O를 헷갈리면 안됩니다..

 

풀이과정

우선 현재 R과 B의 좌표를 알아내서 큐에담는다

1. 현재 큐의 사이즈만큼 반복문을 돌린다.  (-> 큐에담긴 요소가 모두 소진되면 1회 이동 으로 생각)

2. 현재 좌표가 R만 구멍에 빠졋는지 검사한다. 아닐경우 아래를 반복한다.

  • R과 B를 동/서/남/북 으로 4차례 굴린다
  • R과 B가 같은 위치에 있다면 더 많이 움직인 구슬을 왔던길로 한칸 미룬다.
  • 최종 도착지의 좌표가 방문 안했던 곳이면 큐에 담는다

3. 큐의 사이즈 만큼 반복문이 끝난후 10회 이상 이동 했으면 -1을 출력하고 종료한다.

아니면 횟수 증가 후 1. 로 돌아간다.

 

*visited 배열은 단순히 ry,rx,by,bx의 좌표를 동시에 확인하기 위한 배열로 사용했습니다.