Skip to content

Commit 80e99f1

Browse files
authored
Merge pull request #638 from AlgorithmWithGod/JHLEE325
[20250809] BOJ / G1 / 2048 (Easy) / 이준희
2 parents f337d2b + 8336f7e commit 80e99f1

File tree

1 file changed

+121
-0
lines changed

1 file changed

+121
-0
lines changed
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
```java
2+
import java.io.*;
3+
import java.util.*;
4+
5+
public class Main {
6+
static int n;
7+
static int answer = 0;
8+
9+
public static void main(String[] args) throws Exception {
10+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
11+
n = Integer.parseInt(br.readLine());
12+
StringTokenizer st;
13+
14+
int[][] board = new int[n][n];
15+
16+
for (int i = 0; i < n; i++) {
17+
st = new StringTokenizer(br.readLine());
18+
for (int j = 0; j < n; j++) {
19+
board[i][j] = Integer.parseInt(st.nextToken());
20+
answer = Math.max(answer, board[i][j]);
21+
}
22+
}
23+
dfs(0, board);
24+
System.out.println(answer);
25+
}
26+
27+
static void dfs(int depth, int[][] b) {
28+
if (depth == 5) {
29+
answer = Math.max(answer, maxTile(b));
30+
return;
31+
}
32+
dfs(depth + 1, moveUp(b));
33+
dfs(depth + 1, moveDown(b));
34+
dfs(depth + 1, moveLeft(b));
35+
dfs(depth + 1, moveRight(b));
36+
}
37+
38+
static int maxTile(int[][] b) {
39+
int mx = 0;
40+
for (int[] row : b) for (int v : row) mx = Math.max(mx, v);
41+
return mx;
42+
}
43+
44+
static int[][] moveLeft(int[][] b) {
45+
int[][] nb = new int[n][n];
46+
for (int r = 0; r < n; r++) {
47+
Deque<Integer> q = new ArrayDeque<>();
48+
for (int c = 0; c < n; c++) if (b[r][c] != 0) q.offerLast(b[r][c]);
49+
50+
int idx = 0;
51+
while (!q.isEmpty()) {
52+
int cur = q.pollFirst();
53+
if (!q.isEmpty() && cur == q.peekFirst()) {
54+
cur += q.pollFirst();
55+
}
56+
nb[r][idx++] = cur;
57+
answer = Math.max(answer, cur);
58+
}
59+
}
60+
return nb;
61+
}
62+
63+
static int[][] moveRight(int[][] b) {
64+
int[][] nb = new int[n][n];
65+
for (int r = 0; r < n; r++) {
66+
Deque<Integer> q = new ArrayDeque<>();
67+
for (int c = n - 1; c >= 0; c--) if (b[r][c] != 0) q.offerLast(b[r][c]);
68+
69+
int idx = n - 1;
70+
while (!q.isEmpty()) {
71+
int cur = q.pollFirst();
72+
if (!q.isEmpty() && cur == q.peekFirst()) {
73+
cur += q.pollFirst();
74+
}
75+
nb[r][idx--] = cur;
76+
answer = Math.max(answer, cur);
77+
}
78+
}
79+
return nb;
80+
}
81+
82+
static int[][] moveUp(int[][] b) {
83+
int[][] nb = new int[n][n];
84+
for (int c = 0; c < n; c++) {
85+
Deque<Integer> q = new ArrayDeque<>();
86+
for (int r = 0; r < n; r++) if (b[r][c] != 0) q.offerLast(b[r][c]);
87+
88+
int idx = 0;
89+
while (!q.isEmpty()) {
90+
int cur = q.pollFirst();
91+
if (!q.isEmpty() && cur == q.peekFirst()) {
92+
cur += q.pollFirst();
93+
}
94+
nb[idx++][c] = cur;
95+
answer = Math.max(answer, cur);
96+
}
97+
}
98+
return nb;
99+
}
100+
101+
static int[][] moveDown(int[][] b) {
102+
int[][] nb = new int[n][n];
103+
for (int c = 0; c < n; c++) {
104+
Deque<Integer> q = new ArrayDeque<>();
105+
for (int r = n - 1; r >= 0; r--) if (b[r][c] != 0) q.offerLast(b[r][c]);
106+
107+
int idx = n - 1;
108+
while (!q.isEmpty()) {
109+
int cur = q.pollFirst();
110+
if (!q.isEmpty() && cur == q.peekFirst()) {
111+
cur += q.pollFirst();
112+
}
113+
nb[idx--][c] = cur;
114+
answer = Math.max(answer, cur);
115+
}
116+
}
117+
return nb;
118+
}
119+
}
120+
121+
```

0 commit comments

Comments
 (0)