풀이
처음으로 연습해본 BFS 문제이다. 처음 접하던 유형이다보니 다른 코드를 많이 참고했다.
주어진 환경에서 최단거리 내에 있는 물고기를 먹으면서 더 이상 먹을 물고기가 없어질 때 까지 아기 상어를 키우는 문제이다.
최단거리를 구하는 문제에서는 BFS 를 사용해야 한다는 점을 알고 있었지만 어떤 식으로 응요해야하는지 몰라 많이 해맸다.
우선 입력을 받으면서 처음 아기 상어의 위치를 저장해준다.
현재 아기 상어의 크기 및 위치를 고려해서 아기 상어가 먹을 수 있는 가장 가까운 물고기의 위치와 거리를 BFS 를 통해 반환한다.
BFS 를 돌리면서 아기 상어가 방문할 수 있는 좌표에 대하여 방문 처리 및 거리를 좌표에 따라 저장해준 뒤, 아기 상어가 먹을 수 있는 물고기가 있을 경우 edible 리스트에 좌표와 거리를 저장해준다.
이후 모든 탐색이 끝나면 edilbe 리스트를 거리, 맨위, 맨왼쪽 순으로 정렬한 뒤 가장 첫 번째 원소값들을 반환해준다.
이후 아기 상어의 위치를 변경하고 문제 조건에 따라서 먹은 물고기의 개수를 저장해준다.
만약 아기 상어가 먹은 개수가 자기 몸집과 같아질 경우 아기 상어의 몸집을 키운 뒤 반복한다.
만약 더 이상 아기 상어가 먹을 수 있는 물고기가 탐색에서 발견되지 않을 시 -1 을 반환하도록 하고 -1 이 반환되면 반복문을 종료한 뒤 이동한 총 거리를 출력해주면된다.
이 문제를 통해 각 상황마다 최단거리를 BFS 로 반환받고 더 이상 맞는 조건을 찾을 수 없을 때 까지 2차원 배열을 수정해주면서 반복을 해야한다는 점을 알게되었다.
소스코드
References