풀이 치즈의 바깥부분만 매 초마다 제거해야한다. 만약 1인 부분에서 DFS로 0인대까지만 조건을 설정하면 치즈 내부의 공간또한 제거되므로 조건을 다르게 줘야한다. 그래서 좌표값이 1인경우 DFS를 통해 벽에 부딪치는지를 확인했다. 외부의 치즈는 무조건 벽이랑 부딪치므로 제거되고 내부는 불가능하므로 제외된다. 외부 부분을 2로 바꾸고 2로된부분을 저장. 그리고 2로된부분을 제거한다. 이렇게 순서대로 진행하다보면 녹일수 있는 치즈부분이 0개로 나오는데 이전에 이미 계산한 값이 있으므로 그 값이 정답이 된다. 코드
풀이 뱀의 방향이 변할 수 있으므로 방향배열을 설정하고 BFS 혹은 DFS로 생각할 수도 있지만, 단순히 현재 바라보는 방향에서 왼쪽이냐 오른쪽이냐 만 생각하면 굳이 방향 배열을 만들 필요는 없다. dir변수를 둬서 0-우 1-하-2-좌 3-상으로 정한다. 'D'가 나오면 dir변수에 +1을 해주고 'L'가 나오면 -1을 해준다. 그리고 사과가 없는 위치에 도착하면 꼬리를 하나씩 잘라내면 되므로 이동시마다 현재위치를 계속 저장할 객체를 만들고 Queue에 저장한다. 그래서 사과가없으면 제일 처음 꼬리 좌표를 제거하고 그 부분을 이동가능한 0으로 설정한다. 코드
풀이 DFS탐색으로 할경우 최대 크기가 100X100이므로 터질가능성이 있다. 그러므로 도착점이 정해져있는 경우이므로 BFS를 이용하여 해결하였다. 행,열,복구하는데 걸린 현재까지 총시간을 저장하는 객체 Point를 이용하여 PriorityQue를 이용하였다. BFS탐색을하면서 매칸마 이동시마다 복구시간을 더해주면서 복구 시간이 제일 빨리 끝나는 순서대로 재정렬후 , 제일 작은값부터, 즉 제일 빨리 끝날 수 있는 좌표 값 부터 BFS탐색을 하도록 설계하였다. 코드
풀이 처음에는 가장 큰값을 무조건 포함해야 할 거같다는 생각을 했다. 하지만 꼭 가장 큰값을 포함한다고 최대값이 만들어 지지는 않는다. 5개의 테크로미노를 각 좌표에서 모든 경우의수를 고려하여 코드를 작성할려고 했지만 절대 불가능해보였다. 그래서 다시 잘 문제를 읽어보니 테크로미노는 무조건 4개를 연결시켜놓은 도형이다. 즉 DFS를 통해 3번만 타고 들어가면 어떤 도형이든 다 만들 수 있다는 것을 알게되었다. 여기서 또다른 문제가 있었는데 'ㅗ' 모양의 도형은 순수 DFS로만 할려면 절대 불가능했다. 그래서 DFS를 통해서 마지막 좌표로 이동했을 시, 마지막 좌표의 값을 빼고 2번째 좌표의 위치로 이동하여 그 위치에서 4방탐색을 하였다. 이렇게 하면 'ㅗ' 모양을 만들 수 있다. 코드