본문 바로가기

알고리즘 (2020 : 08 : 10 ~ )/구현, 시뮬

[백준 / BOJ] 12100 2048 (Easy)

문제

출처 : www.acmicpc.net/problem/12100

 

12100번: 2048 (Easy)

첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2

www.acmicpc.net

N * N 판이 주어졌을때, 최대 5번 합치면서 움직이며, 만들수있는 가장 큰 블록을 구하는 게임이다. 

 

풀이

구현문제였다.

- 3차원 temp배열을 만든다. (temp[i][j][cnt]) 이는 cnt번 움직였을때, i,j의 상태를 뜻한다. (연산 최소화)

- check 배열을 만든다. cnt번 움직였을때, 최댓값이 check[cnt]에 저장된 값보다 작을경우, 리턴해주기 위함.

알고리즘 동작과정

1. cnt번 움직인 현재 상태에서 최댓값 찾아줌

2. check[cnt]를 통해 cnt번 움직였을때 최댓값 찾아줌 -> 작다면 종료, 크다면 값 갱신

3. temp배열에 현재 보드상태 저장

4. 보드를 4방향으로 움직임(위 아래 왼쪽 오른쪽)

5. temp배열과 비교 (변화값이 없으면 종료)

위 순서를 반복한다. 

 

소스코드

https://github.com/devxb/JJUNalgo/blob/master/2048%20(Easy)/main.cpp

 

devxb/JJUNalgo

백준 알고리즘 소스코드🙃. Contribute to devxb/JJUNalgo development by creating an account on GitHub.

github.com