문제 및 풀이

퍼즐 조각 채우기 (Link)

퍼즐을 돌리는 연산을 아래와 같이 퍼즐의 원본은 그대로 두고 회전을 만들어 탐색 코드로 간단히 처리한 것이 잘되었다!

const int dy[4] = { -1, 0, 1, 0 };
const int dx[4] = { 0, 1, 0, -1 };

// ...
// 서로 다른 2개의 board 존재. 하나는 퍼즐이 맞춰질 빈칸이 있고, 다른 하나는 퍼즐이 있다.
// 퍼즐은 회전이 가능하며 뒤집는 것은 안된다. 퍼즐을 회전하며 빈칸에 맞춰봐야 한다.
for (int tDir = 0; tDir < 4; ++tDir)
{
	// 2개의 board에 대한 각각 현재 위치 추출
	for (int i = 0; i < 4; ++i)
	{
		int ngy = cgy + dy[i];
		int ngx = cgx + dx[i];
		int nty = cty + dy[(i + tDir) % 4];
		int ntx = ctx + dx[(i + tDir) % 4];
		
		// ...
	}
}