본문 바로가기
알고리즘/백준

[백준 12100] 2048 (Easy) (C++)

by Bloofer 2020. 6. 2.

A. 문제설명

https://www.acmicpc.net/problem/12100

문제에 대한 자세한 설명은 링크 참조

 

1. 크기가 N×N인 지도가 존재

2. 해당 지도 위에서 2048 게임을 수행

3. 기본적인 규칙은 상하좌우로 이동하며 같은 수는 병합되고 해당 이동 위치로 도형들이 달라붙는 것

4. 한번의 이동에서는 한번의 병합만 이루어지며 같은 수의 도형이 3개일 경우 병합의 우선순위는 해당 방향에 가까운 쪽부터 병합
5. 최대 다섯번 이동해서 나올 수 있는 가장 큰 수 구하기

 

B. 접근법

DFS + 시뮬레이션

 

먼저 DFS로 상하좌우의 이동 조합을 모두 구하고, 구해진 해당 이동 조합으로 도형 이동 시뮬레이션 수행

 

C. 풀이

1. 먼저 DFS로 상하좌우의 이동 조합을 모두 구함

2. 구해진 해당 이동 조합으로 도형 이동 시뮬레이션 수행 - simulate_game()

3. 여기서 이동 시뮬레이션은 상하좌우로 이동을 모사하는데, 실제 이동의 가장 작은 단위는 하나의 1차원 배열의 이동으로 볼 수 있음

4. move_row() 함수는 해당 배열의 이동을 수행함

5. 이동을 모두 수행한 후, 지도내 가장 큰 수를 업데이트

 

D. 내 코드