ssks1013   3년 전

제가 생각한 로직은 다음과 같습니다

각 칸을 노드라고 생각해서 인접 리스트로 그래프를 만듭니다

벽이 세워지면 그 부분의 연결을 끊습니다

이렇게 그래프를 만든 후에 연결된 노드가 1개인 노드부터 도미노를 채워나갑니다 이를 처리하기 위해 fix라는 리스트를 썼습니다

이때 도미노가 놓이는 칸과 인접한 칸은 연결이 끊어집니다

인접한 칸이 연결된 노드가 1개가 되면 fix에 넣어서 계속해서 채워넣는 작업을 합니다

fix가 비었을 때 그래프를 1번부터 탐색해서 채워지지 않은 노드가 있다면 해당 노드와 연결된 노드 하나에 도미노를 채웁니다 

(가로든 세로든 상관없음, 왜냐하면 연결된 노드가 1개인 칸은 모두 처리했으므로 남은 칸은 반드시 2 x 2이상의 크기의 공간이 된다

따라서 연결된 노드가 1개만 있는 노드에 도미노를 채우는 작업을 다 마쳤을 때, 빈 공간의 첫 번째 칸에서는 가로로 놓든 세로로 놓든 상관이 없음)

그리고 다시 연결된 노드가 1개인 노드가 발생하면 다시 fix에 집어넣어서 fix를 처리해주는 작업을 반복합니다

이렇게 해서 모든 칸이 채워졌으면 루프를 끝냅니다

제 로직이 문제일까요? 코드가 문제일까요?

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