<C/C++> BOJ 12100 2048(Easy)
Coding Test
2022. 5. 4. 09:51
https://www.acmicpc.net/problem/12100
12100๋ฒ: 2048 (Easy)
์ฒซ์งธ ์ค์ ๋ณด๋์ ํฌ๊ธฐ N (1 ≤ N ≤ 20)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ๊ฒ์ํ์ ์ด๊ธฐ ์ํ๊ฐ ์ฃผ์ด์ง๋ค. 0์ ๋น ์นธ์ ๋ํ๋ด๋ฉฐ, ์ด์ธ์ ๊ฐ์ ๋ชจ๋ ๋ธ๋ก์ ๋ํ๋ธ๋ค. ๋ธ๋ก์ ์ฐ์ฌ ์๋ ์๋ 2
www.acmicpc.net
#include <iostream>
using namespace std;
enum { UP, DOWN, LEFT, RIGHT };
struct board_t {
int b[20][20];
};
int N;
int maxVal;
void moveTo(board_t& board, int dir) {
for (int i = 0; i < N; i++) {
bool isPossible = true;
int target = dir == UP || dir == LEFT ? 0 : (N - 1);
for (int j = 0; j < N; j++) {
int varOffset = dir == UP || dir == LEFT ? j : (N - 1 - j);
int& cur = dir == UP || dir == DOWN ? board.b[varOffset][i] : board.b[i][varOffset];
if (cur != 0) {
int& tPos = dir == UP || dir == DOWN ? board.b[target][i] : board.b[i][target];
if (tPos == cur && isPossible) {
if (target != varOffset) {
isPossible = false;
tPos *= 2;
cur = 0;
}
}
else {
isPossible = true;
if (tPos == 0) {
tPos = cur;
cur = 0;
}
else {
target = target + (dir == UP || dir == LEFT ? 1 : -1);
j--;
}
}
}
}
}
}
void calcMax(board_t& board, int count) {
if (count == 0) {
for (int r = 0; r < N; r++) {
for (int c = 0; c < N; c++) {
if (board.b[r][c] > maxVal) maxVal = board.b[r][c];
}
}
return;
}
board_t cpBoard;
for (int dir = 0; dir < 4; dir++) {
cpBoard = board;
moveTo(cpBoard, dir);
calcMax(cpBoard, count - 1);
}
}
int main() {
board_t board;
cin >> N;
for (int r = 0; r < N; ++r) {
for (int c = 0; c < N; ++c) {
cin >> board.b[r][c];
}
}
calcMax(board, 5);
cout << maxVal;
return 0;
}
'Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2022 ์๋ฐ๊ธฐ ์ผ์ฑSDS ์ฝ๋ฉํ ์คํธ ํ๊ธฐ (0) | 2022.07.22 |
---|---|
<C/C++> BOJ 15683 ๊ฐ์ (0) | 2022.05.06 |
<C/C++> BOJ 14501: ํด์ฌ (0) | 2022.05.03 |
<C/C++> BOJ 3190: ๋ฑ (0) | 2022.05.02 |
<C/C++> BOJ 15685: ๋๋๊ณค ์ปค๋ธ (0) | 2022.04.05 |