BOJ 12094 - 2048 (Hard)


BOJ 12094 - 2048 (Hard)

2048(Easy) 문제와 근본적으로 같으나, 최대 횟수가 10이라는 점에서 달라졌다. 해결을 위해서는 다음이 필요하다 1. 2048(Easy) 코드의 최적화. 2. 백트랙킹 기법 사용 일단 1. 기존의 코드에서 getMax 부분을 최적화 했다. 새로 만든 setMax 함수로 미리 최대값을 계산한 후 up, down, left, right 멤버함수에 최댓값이 바뀔 수 있는 연산이 이루어 지는 경우 (그러니까 숫자가 합쳐지는 연산을 하는 경우) 최댓값을 갱신 할 수 있으면 갱신한다. 그리고 getMax는 그저 max 멤버변수를 반환한다. 다음으로 2. 이 부분은 생각하기 간단하다. 현재 행렬의 최댓값 > (기존의 최댓값 >> 현재 행렬의 남은 이동 횟수)가 참이면 이동을 계속, 아니라면 빠져나오게 해주면 된다. 또 up, down, left, right를 수행했는데도 행렬에 바뀐 부분이 없다면, 해당 방향으로는 들어가지 않게 해주면 된다. 해결 코드) 1 2 3 4 5 6 7 8 9 ...



원문링크 : BOJ 12094 - 2048 (Hard)