clrmt   4년 전

평범하게 푸는건 식상해서 새로운 방법으로 시도하려고 노력을 해봤습니다.

이대로 코드를 구현했더니 18%에서 틀렸다고 나오는데, 아이디어에 잘못된 부분이 있을까요?

fc88492a-0c92-42a5-b568-b9d8a2ac870e


우선 이 아이디어는 고인물과 안고인물을 구분해야 합니다.

91fb8515-753a-4f5c-a2f4-0d63ef1d2ce5


만약 어떤 한 칸이 녹으면 인접한 8군데의 바다는 연쇄적으로 안고인물이 됩니다.

이제, 어떤 칸이 녹았을 때 섬이 몇 개로 분리되는지를 셀 것입니다.

위에서부터 아래로, 그리고 왼쪽에서부터 오른쪽으로 탐색합니다.(사실 탐색순서는 상관없습니다.)


ff5020bd-ae40-4b46-828f-88855362b4df


만약 어떤 칸이 녹으면, 주위 8칸을 시계방향으로 따라가면서 을 공유하는 섬(I), 꼭짓점을 공유하는 안고인물(s)이 번갈아 등장하는 횟수를 셉니다.

위 그림에서는 S-I 전환수가 3이므로, 3개의 섬으로 나누어집니다.(분리 카운트 +2)

73bdf443-c637-44d5-9976-68ad23f0e7ca


그리고 다음의 섬을 탐색하면, 인접한 4곳이 바다이므로 분리 카운트를 감소시킵니다.

최종적으로 위의 케이스에서는 분리 카운트가 0이 되었으므로 섬이 분리되지 않습니다.

7dc4e20b-ab56-4294-9c63-07e9ceb4f2ca

위와 같은 케이스가 있다면 S-I 전환수가 2이므로 2개로 분리됩니다. 한편 섬의 안쪽이 고인물일 경우에는 S-I 전환수가 1이므로 분리되지 않습니다.

이를 1사이클 반복할 때마다,

최종 분리 카운트가 0이면 분리되지 않음, 음수이면 섬이 전부 없어진 것, 양수이면 섬이 분리된 것으로 생각하였습니다.

여기에 잘못된 부분이 있나요?


※반례 찾기를 위해 소스 코드를 올려두겠지만, 코드 오류보다는 아이디어만 검증해 주셨으면 합니다.

sait2000   4년 전

안 풀어서 잘 모르겠는데 이런 거 들어올 수 있나요?

clrmt   4년 전

아 이런 케이스가 있군요... 그냥 정해로 가야겠네요.

댓글을 작성하려면 로그인해야 합니다.