문제
출처 : 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
'알고리즘 (2020 : 08 : 10 ~ ) > 구현, 시뮬' 카테고리의 다른 글
[백준 / BOJ] 14464 소가 길을 건너간 이유 4 (0) | 2020.08.29 |
---|---|
[백준 / BOJ] 18679 Banana (0) | 2020.08.17 |
[백준 / BOJ] 14746 Closest Pair (0) | 2020.08.16 |
[백준 / BOJ] 5397 키로거 [이중 연결 리스트] (0) | 2020.08.13 |
[백준 / BOJ] 3190 뱀 (0) | 2020.08.10 |