Post

[๋ฐฑ์ค€] 12100๋ฒˆ: 2048 (Easy)

[๋ฐฑ์ค€] 12100๋ฒˆ: 2048 (Easy)

๐Ÿ“Œ ๋ฌธ์ œ

https://www.acmicpc.net/problem/12100

๐Ÿ“Œ ์„ค๋ช…

๋ณด๋“œ์˜ ํฌ๊ธฐ์™€ ์ด๋™ ํšŸ์ˆ˜๊ฐ€ ์ถฉ๋ถ„ํžˆ ์ž‘์œผ๋ฏ€๋กœ ๋ฐฑํŠธ๋ž˜ํ‚น์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๊นŒ๋‹ค๋กœ์› ๋˜ ๋ถ€๋ถ„์€ ์ƒ, ํ•˜, ์ขŒ, ์šฐ๋กœ ๋ถˆ๋ก์„ ์ด๋™์‹œํ‚ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๋ชจ๋“  ์ด๋™ ๋ฐฉํ–ฅ์— ๋Œ€ํ•œ ์›€์ง์ž„์„ ์ผ์ผํžˆ ์ž‘์„ฑํ–ˆ๋Š”๋ฐ, ํ•˜๋‹ค๋ณด๋‹ˆ ์•„๋‹Œ ๊ฒƒ ๊ฐ™์•˜๋‹ค. ๋”ฐ๋ผ์„œ ๋ธ”๋ก ์›€์ง์ž„์— ๋Œ€ํ•œ ์ฝ”๋“œ๋Š” ์œ„๋กœ ์›€์ง์ด๋Š” ๊ฒฝ์šฐ๋กœ ํ•œ์ •ํ•˜์—ฌ ์ž‘์„ฑํ•˜์˜€๊ณ  ๋‚˜๋จธ์ง€ ๋ฐฉํ–ฅ์€ ๋ณด๋“œ๋ฅผ ๋Œ๋ฆฌ๋Š” ๊ฒƒ์œผ๋กœ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

๐Ÿ“Œ ์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int n;
vector <vector<int>> arr(20, vector<int>(20));
int ans;

// ๊ธฐ๋ณธ๊ฐ’์€ ์œ„๋กœ ์ด๋™, ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์ผ ๊ฒฝ์šฐ arr๋ฅผ ํšŒ์ „ํ•œ๋‹ค.
void moveUp() {
	vector<vector<int>> moved(20, vector<int>(20));

	for (int i = 0;i < n;i++) {
		int able = 0;
		int first = -1;
		int second = -1;
		for (int j = 0;j < n;j++) {
			if (arr[j][i] != 0) {
				if (first == -1)
					first = arr[j][i];
				else if (second == -1) {
					second = arr[j][i];

					if (first == second) {
						moved[able][i] = first + second;
						able++;
						first = -1;
						second = -1;
					}
					else {
						moved[able][i] = first;
						able++;
						first = second;
						second = -1;
					}
				}
			}

			if (j == n - 1 && first != -1) {
				moved[able][i] = first;
			}
		}
	}

	arr = moved;
}

// arr๋ฅผ ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ 1ํšŒ์ „
void clockwise() {
	for (int i = 0; i < n; i++) {
		for (int j = i; j < n; j++) {
			swap(arr[i][j], arr[j][i]);
		}
	}

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n / 2; j++) {
			swap(arr[i][j], arr[i][n - j - 1]);
		}
	}
}

// arr๋ฅผ ์‹œ๊ณ„ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ 1ํšŒ์ „
void counterClockwise() {
	for (int i = 0; i < n; i++) {
		for (int j = i; j < n; j++) {
			swap(arr[i][j], arr[j][i]);
		}
	}

	for (int j = 0; j < n; j++) {
		for (int i = 0; i < n / 2; i++) {
			swap(arr[i][j], arr[n - i - 1][j]);
		}
	}
}

void dfs(int k) {
	if (k == 5) {
		for (int i = 0;i < n;i++) {
			for (int j = 0;j < n;j++) {
				ans = ans > arr[i][j] ? ans : arr[i][j];
			}
		}

		return;
	}

	vector<vector<int>> origin = arr;

	// ์ƒ
	moveUp();
	dfs(k + 1);
	arr = origin;

	// ํ•˜
	clockwise();
	clockwise();
	moveUp();
	counterClockwise();
	counterClockwise();
	dfs(k + 1);
	arr = origin;

	// ์ขŒ
	clockwise();
	moveUp();
	counterClockwise();
	dfs(k + 1);
	arr = origin;

	// ์šฐ
	counterClockwise();
	moveUp();
	clockwise();
	dfs(k + 1);
	arr = origin;
}

int main() {
	cin >> n;
	for (int i = 0;i < n;i++) {
		for (int j = 0;j < n;j++) {
			cin >> arr[i][j];
		}
	}

	dfs(0);
	cout << ans;
}
This post is licensed under CC BY 4.0 by the author.