169번줄에 checkPossible 함수로는 루프가 끝나야 하는 지를 정확하게 판단할 수 없습니다
상어보다 작은 물고기가 있다고 해서 꼭 먹을 수 있는 것은 아닙니다
9 3
3 1
위와 같은 상황에선 먹을 수 있는 물고기는 있지만 먹을 수 없습니다
16236번 - 아기 상어
169번줄에 checkPossible 함수로는 루프가 끝나야 하는 지를 정확하게 판단할 수 없습니다
상어보다 작은 물고기가 있다고 해서 꼭 먹을 수 있는 것은 아닙니다
9 3
3 1
위와 같은 상황에선 먹을 수 있는 물고기는 있지만 먹을 수 없습니다
3, 1 : 2
4, 2 : 4
3, 2 : 5
1, 2 : 7
0, 3 : 9
0, 2 : 10
0, 4 : 12
1, 3 : 14
1, 1 : 16
0, 1 : 17
1, 0 : 19
2, 0 : 20
2, 1 : 21
3, 0 : 23
4, 0 : 24
4, 1 : 25
3, 3 : 28
2, 3 : 29
1, 4 : 31
1, 5 : 32
0, 5 : 33
2, 5 : 35
2, 4 : 36
3, 4 : 37
3, 5 : 38
4, 5 : 39
4, 4 : 40
4, 3 : 41
5, 3 : 42
5, 2 : 43
5, 1 : 44
5, 0 : 45
5, 4 : 49
5, 5 : 50
0, 0 : 60
도움이 되었으면 좋겠습니당
전체 과정을 올려드립니다.
79번째 줄의 루프를 보면, 어떤 칸을 하나 빼고, 그 주변 4칸에서 먹을 수 있는 물고기가 하나라도 있다면 바로 루프를 탈출하고 있습니다. 하지만 이렇게 하면 동시간에 도달할 수 있는 모든 칸을 검사하지 못합니다. 예를 들어 어떤 칸에서 시작해서 상하좌우 4칸으로 모두 움직일 수 있다면, 큐에 4개의 원소가 한 번에 들어가게 됩니다. 그 후 원소를 하나 꺼내게 되면 여전히 세 개의 원소는 큐에 남아있는 상태인데, 꺼낸 칸의 4방향 주변에 먹을 수 있는 물고기가 있다면 아직 큐에 남아있는 3개의 칸의 주변에 먹을 수 있는 물고기가 있는지 여부는 확인하지 않고 바로 루프를 탈출하게 됩니다.
정답과의 차이를 보면 처음으로 달라지는 곳이 7초에서 (1, 2)가 아니라 (2, 1)로 가고 있는데, (1, 2)가 더 위쪽에 있으므로 이쪽에 가야 하지만, 그 전에 있었던 (3, 2)에서 (2, 2)보다 (3, 1)을 먼저 탐색해 들어갔기 때문에, (3, 1)의 주변에 있던 (2, 1)만 보고 먹을 수 있는 물고기가 있다고 판단하고 루프를 바로 빠져나가는 발마에 (2, 2)의 주변에 뭐가 있는지는 확인조차 하지 않은 것입니다.
댓글을 작성하려면 로그인해야 합니다.
kkkkkkya 5년 전 1
일단 제 코드는 첨부와 같고,
4번 예제의 결과 값이 왜 60인지 이해되지 않아 문의드립니다 ㅠㅠ
저는 문제에 주어진 요구사항을 고려해 물고기를 먹는 순간들을 따라가 보았습니다.
- 가장 처음에 아기 상어의 크기는 2이고, 아기 상어는 자신의 크기와 같은 수의 물고기를 먹을 때 마다 크기가 1 증가한다.
- 1초 마다 좌/우/상/하 1칸 씩 이동
- 먹을 수 있는 물고기가 1마리라면, 그 물고기를 먹으러 간다.
- 아기 상어는 자신의 크기보다 큰 물고기가 있는 칸은 지나갈 수 없고, 나머지 칸은 모두 지나갈 수 있다.
- 아기 상어는 자신의 크기보다 작은 물고기만 먹을 수 있다. 따라서, 크기가 같은 물고기는 먹을 수 없지만, 그 물고기가 있는 칸은 지나갈 수 있다.
- 먹을 수 있는 물고기가 1마리보다 많다면, 거리가 가장 가까운 물고기를 먹으러 간다.
> 거리는 아기 상어가 있는 칸에서 물고기가 있는 칸으로 이동할 때, 지나야하는 칸의 개수의 최소값이다.
> 거리가 가까운 물고기가 많다면, 가장 위에 있는 물고기, 그러한 물고기가 여러마리라면, 가장 왼쪽에 있는 물고기를 먹는다.
> 아기 상어의 이동은 1초 걸리고, 물고기를 먹는데 걸리는 시간은 없다고 가정한다.
즉, 아기 상어가 먹을 수 있는 물고기가 있는 칸으로 이동했다면, 이동과 동시에 물고기를 먹는다. 물고기를 먹으면, 그 칸은 빈 칸이 된다.
그 결과,
이런 순서로 움직이고 물고기를 먹어, 51초가 답이 될 것 같은데 ㅠㅠ
제 생각과 따라간 순서가 어디가 잘못됐을까요 ? ㅠㅠ
더불어, 코드 채점하면 시간 초과가 납니다.
어떤 부분이 문제일 지 아낌없는 !! 조언 주시면 감사하겠습니다 !! ♥