Skip to content

Commit 69a56dd

Browse files
authored
[20250626] BOJ / G1 / 2048 (Easy) / 이강현
1 parent efc8c35 commit 69a56dd

File tree

1 file changed

+161
-0
lines changed

1 file changed

+161
-0
lines changed
Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
```java
2+
import java.io.*;
3+
import java.util.*;
4+
5+
public class Main {
6+
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
7+
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
8+
static StringTokenizer st;
9+
static int N;
10+
static int ans = 0;
11+
12+
public static void main(String[] args) throws IOException {
13+
N = Integer.parseInt(br.readLine());
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+
}
21+
}
22+
23+
backtracking(0, board);
24+
25+
bw.write(ans +"");
26+
bw.close();
27+
}
28+
static void backtracking(int moveCnt, int[][] board) throws IOException {
29+
if(moveCnt == 5) {
30+
for (int i = 0; i < N; i++) {
31+
for (int j = 0; j < N; j++) {
32+
ans = Math.max(ans, board[i][j]);
33+
}
34+
}
35+
return;
36+
}
37+
for (int k = 1; k <= 4; k++) {
38+
int[][] newBoard = new int[N][N];
39+
for (int i = 0; i < N; i++) {
40+
for (int j = 0; j < N; j++) {
41+
newBoard[i][j] = board[i][j];
42+
}
43+
}
44+
move(k, newBoard);
45+
backtracking(moveCnt + 1, newBoard);
46+
}
47+
}
48+
static void move(int opt, int[][] board){ //1이면 위, 2면 아래, 3이면 왼쪽, 4면 오른쪽
49+
boolean[][] visited = new boolean[N][N];
50+
if(opt == 1) {
51+
for (int i = 1; i < N; i++) {
52+
for (int j = 0; j < N; j++) {
53+
if(board[i][j] == 0) { //빈칸이면 넘어감
54+
continue;
55+
}
56+
int tmp = i-1; //tmp는 현재 칸과 마주할 칸을 나타냄
57+
while(tmp >= 0 && board[tmp][j]==0){ //바로 윗칸이 빈칸이 아닐때까지 이동
58+
tmp--;
59+
}
60+
if(tmp<0){// 현재 칸 위가 다 빈칸일 경우
61+
board[0][j] = board[i][j]; //맨 윗칸에 현재칸 두고 끝
62+
board[i][j] = 0;
63+
continue;
64+
}
65+
if(board[i][j] == board[tmp][j] && !visited[tmp][j]){ //충돌시 같고 이미 합쳐진 블록이 아닐경우
66+
board[tmp][j] *= 2;
67+
visited[tmp][j] = true;
68+
board[i][j] = 0;
69+
}else{ //다르다면 tmp 한칸 앞에 그냥 둠
70+
board[tmp+1][j] = board[i][j];
71+
if(tmp+1 != i){ //tmp가 애초에 i랑 딱 붙어있을 경우에는 그대로가 유지되게 함.
72+
board[i][j] = 0;
73+
}
74+
}
75+
}
76+
}
77+
}else if(opt == 2) {
78+
for (int i = N-2; i >= 0; i--) {
79+
for (int j = 0; j < N; j++) {
80+
if(board[i][j] == 0) {
81+
continue;
82+
}
83+
int tmp = i+1;
84+
while(tmp < N && board[tmp][j]==0){
85+
tmp++;
86+
}
87+
if(tmp>=N){
88+
board[N-1][j] = board[i][j];
89+
board[i][j] = 0;
90+
continue;
91+
}
92+
if(board[i][j] == board[tmp][j] && !visited[tmp][j]){
93+
board[tmp][j] *= 2;
94+
visited[tmp][j] = true;
95+
board[i][j] = 0;
96+
}else{
97+
board[tmp-1][j] = board[i][j];
98+
if(tmp-1 != i){
99+
board[i][j] = 0;
100+
}
101+
}
102+
}
103+
}
104+
}else if(opt == 3) {
105+
for (int j = 1; j < N; j++) {
106+
for (int i = 0; i < N; i++) {
107+
if(board[i][j] == 0) {
108+
continue;
109+
}
110+
int tmp = j-1;
111+
while(tmp >= 0 && board[i][tmp]==0){
112+
tmp--;
113+
}
114+
if(tmp<0){
115+
board[i][0] = board[i][j];
116+
board[i][j] = 0;
117+
continue;
118+
}
119+
if(board[i][j] == board[i][tmp] && !visited[i][tmp]){
120+
board[i][tmp] *= 2;
121+
visited[i][tmp] = true;
122+
board[i][j] = 0;
123+
}else{
124+
board[i][tmp+1] = board[i][j];
125+
if(tmp+1 != j){
126+
board[i][j] = 0;
127+
}
128+
}
129+
}
130+
}
131+
}else if(opt == 4) {
132+
for (int j = N-2; j >= 0; j--) {
133+
for (int i = 0; i < N; i++) {
134+
if(board[i][j] == 0) {
135+
continue;
136+
}
137+
int tmp = j+1;
138+
while(tmp < N && board[i][tmp]==0){
139+
tmp++;
140+
}
141+
if(tmp>=N){
142+
board[i][N-1] = board[i][j];
143+
board[i][j] = 0;
144+
continue;
145+
}
146+
if(board[i][j] == board[i][tmp] && !visited[i][tmp]){
147+
board[i][tmp] *= 2;
148+
visited[i][tmp] = true;
149+
board[i][j] = 0;
150+
}else{
151+
board[i][tmp-1] = board[i][j];
152+
if(tmp-1 != j){
153+
board[i][j] = 0;
154+
}
155+
}
156+
}
157+
}
158+
}
159+
}
160+
}
161+
```

0 commit comments

Comments
 (0)