*2048(easy)와 풀이단계는 비슷하지만, 가지치기를 해줘야 한다. (최대 횟수가 2배로 늘었기 때문에)
-가지치기
1) 변경된 맵이 변경되기 이전의 맵과 동일한 경우 -> 이 방향으로는 더 이상 나아가지 않는다.
2) 맵에서 최대값을 찾을때, 최대값은 2승씩 커진다. (cnt==10 이라면 가장 최대값은 1024가 될 것이다. )
이 특징을 이용해서 현재 depth에서 최대값에 도달할 수 있는 지 확인한다.
(즉, 한 번 10번까지 변경된 맵에서 최대값을 추출한 후 maxBlock[10] = 1024 / maxBlock[9] = 512 .... 이런 식으로 미리 저장을 해 놓는다.)
*실제 최대값은 1024가 아닐 수 있다.
3) 현재 맵에서 구한 최대값이 현재 depth(==cnt)에서 나와야 하는 최대값보다 작은 경우에는 더 이상 보지 않는다.
*가지치기 1번 때문에 맵을 먼저 변경한 후에 dfs를 돌리도록 변경했다.
쉬운 버전 참고
2019/08/01 - [BOJ/C++] - [BOJ] 12100. 2048(easy)
'BOJ > C++' 카테고리의 다른 글
[BOJ] 2151. 거울설치 + TC (0) | 2020.03.18 |
---|---|
[BOJ] 9376. 탈옥 (0) | 2020.03.18 |
[BOJ] 16638. 괄호 추가하기2 (0) | 2020.03.17 |
[BOJ] 16988. Baaaaaaaaaduk2 (Easy) (0) | 2020.03.16 |
[BOJ] 10711. 모래성 (0) | 2020.03.15 |