#define _CRT_SECURE_NO_WARNINGS#include//굳이 좌표값에 놓아줘야 하나??//낚시꾼이 어느 열에 왔을 때, 그 열에 있는 상어를 다 가져올 수 있다면?// 각 열에 해당하는 샤크리스트를 만들수 있다면? 그리고 그 리스트를 링크드List로 만들어낸다면?//2차원 LinkedList를 하나씩 떼어다가 붙여야 하겠지?typedef struct _tagShark {int x, y;int speed;int d;int size;_tagShark* next;_tagShark* prev;_tagShark() :x(0), y(0), speed(0), d(0), size(0), next(nullptr), prev(nullptr){}_tagShark(int x, int y, int speed, int d, int size):x(x), y(y), speed(speed), d(d), size(size), next(nullptr), prev(nullptr){}}SHARK, * pSHARK;SHARK* sharkList[101] = { nullptr };SHARK* endLine[101];SHARK sharks[10001];int N, X, Y;int currCount;SHARK* visit[101][101] = { nullptr };int total = 0;void separateNode(_tagShark* target, int index) {if (target->prev) {target->prev->next = target->next; //target의 next가 존재할 수도 있고, 아닐 수도 있지만 이 코드에는 문제가 없음}else {//target이 첫 노드일 때sharkList[index] = target->next;}//else {// sharkList[index] = target->next;// if (target->next) {// target->next->prev = nullptr;// }// else {// sharkList[index] = nullptr;// endLine[index] = nullptr;// }//}if (target->next) {target->next->prev = target->prev; //target의 prev가 존재할 수도 있고, 아닐 수도 있지만, 이 코드에는 문제가 없음}else {//target이 마지막 노드일 때endLine[index] = target->prev;}target->prev = nullptr;target->next = nullptr;if (!sharkList[index]) endLine[index] = nullptr;}void addNode(_tagShark* target, int index) {target->prev = nullptr;target->next = nullptr;if (!sharkList[index]) {sharkList[index] = target;endLine[index] = target;}else{//일반적인 경우endLine[index]->next = target;target->prev = endLine[index];endLine[index] = target;}}void removeNode(_tagShark* target) {//delete target;//target = nullptr;}void resetVisit(int X, int Y) {for (int i = 0; i <= Y; ++i)for (int j = 0; j <= X; ++j)visit[i][j] = nullptr;}int fishing(int index) {_tagShark* start = nullptr;_tagShark* target = nullptr;int y = Y + 10;if (sharkList[index]) {start = sharkList[index];}else {return 0;}while (start) {if (start->y < y) {y = start->y;target = start;}start = start->next;}if (target) {separateNode(target, index);return target->size;}return 0;}bool moveShark(_tagShark* target) {int cycle = 0;int serial = 0;int newIndex = 0;if (target->d < 3) {//위, 아래로 움직임 : Y값의 영향을 받음cycle = (Y - 1) * 2;}else {//오른쪽, 왼쪽으로 움직임 : X값의 영향을 받음cycle = (X - 1) * 2;}switch (target->d) {case 1: {//위serial = 2 * Y - target->y + 1 + target->speed;break;}case 2: {//아래serial = target->y + target->speed;break;}case 3: {//오른쪽serial = target->x + target->speed;break;}case 4: {//왼쪽serial = 2 * X - target->x + 1 + target->speed;break;}default: {break;}}if (target->d < 3) {newIndex = serial % cycle;if (newIndex >= Y) {target->d = 1;target->y = 2 * Y - newIndex;}else if (newIndex == 0) {target->d = 1;target->y = 2;}else {target->d = 2;target->y = newIndex;}}else {newIndex = serial % (2 * X - 2);if (newIndex >= X) {target->d = 4;target->x = 2 * X - newIndex;}else if (newIndex == 0) {target->d = 4;target->x = 2;}else {target->d = 3;target->x = newIndex;}}//----------target은 완전히 분리가 된 상태-----------------------if (!visit[target->y][target->x]) {visit[target->y][target->x] = target;return true;}else {if (visit[target->y][target->x]->size > target->size) {removeNode(target);return false;}else {separateNode(visit[target->y][target->x], visit[target->y][target->x]->x);removeNode(visit[target->y][target->x]);visit[target->y][target->x] = target;return true;}}}void moveAllShark() {_tagShark* target;_tagShark* next;bool result = false;for (int i = 1; i <= X; ++i) {if (sharkList[i]) {target = sharkList[i];while (target) {next = target->next;separateNode(target, i);result = moveShark(target);if (result) addNode(target, target->x);target = target->next;}}}}int main() {int y, x, s, d, size;scanf("%d %d %d", &Y, &X, &N);for (int i = 0; i < N; ++i) {scanf("%d %d %d %d %d", &y, &x, &s, &d, &size);sharks[i] = SHARK(x, y, s, d, size);addNode(&sharks[i], sharks[i].x);}for (int i = 1; i <= X; ++i) {total += fishing(i);resetVisit(X, Y);moveAllShark();}printf("%d\n", total);return 0;}이 코드의 문제점이 뭘까요? chat GPT보다 똑똑간 휴먼의 파워를 보여주세요ㅠㅠ