Problem : 아기 상어
유형 : BFS
문제 해석
- 아기 상어를 조건에 맞춰 움직이며, 가장 가까운 물고기를 먹는다.
- 물고기를 먹은 개수에 따라서 아기 상어는 커진다.
- 물고기를 더 이상 먹지 못하면 지금까지 이동한 거리를 출력한다.
문제 재해석
- 최단 거리를 찾아야 하므로
BFS
를 통해 움직여야 한다. - 가장 위쪽, 가장 왼쪽을 찾아야 하므로
정렬
이 필요하다.
해결 전략 (17)
- BFS를 이용하여 아기 상어를 움직인다.
- 가장 가까운 거리에 있는 물고기들의 목록을 저장한다.
- 해당 물고기 목록 중 가장 위쪽 왼쪽에 있는 물고기를 선택한다.
- 해당 물고기를 먹는다.
설계, 구현 (30)
- 먹을 수 있는 가장 가까운 물고기들의 목록을 담는 벡터를 만든다.
- 상어는 가려는 곳이 물이거나, 물고기가 자신의 크기와 같으면 이동만 한다.
- BFS를 돌다가 물고기를 먹는 순간, 다음 단계의 BFS는 진행하지 않는다.
- 하지만 현재 단계의 남은 과정들은 진행해야 한다.
주의할 점
- 물고기를 먹고 난 뒤, 상어의 위치는 바뀌어야 한다.
- 상어의 위치에 크기가 9인 물고기가 있는 것이 아니다.
디버깅 (3)
- 아기 상어의 초기 위치를 크기가 9인 물고기가 있는것으로 잘못 설정하였다.
코드
1 |
|
피드백
- 초기 상태가 변경되는 경우를 신경 쓰자.