-
6109. 추억의 2048게임SWexpertAcademy 2019. 8. 10. 00:13
#include<cstdio> #include<iostream> #include<vector> #include<algorithm> #include<cstdlib> #include<cstring> #include<string> using namespace std; int n; int map[21][21]; int temp[21][21]; bool f[21]; int ans = 0; int sum; void move(int dir) { if (dir == 1) {//down for (int i = 0; i < n; i++) { for (int j = 0; j < 20; j++) f[j] = false; for (int j = 0; j < n; j++) { if (map[j][i] != 0) { for (int k = j - 1; k >= 0; k--) { if (map[k][i] != 0) { if (map[k][i] == map[j][i]) { if (f[k] == false) { map[k][i] *= 2; map[j][i] = 0; f[k] = true; break; } else { if (k + 1 != j) { map[k + 1][i] = map[j][i]; map[j][i] = 0; } break; } } else { if (k + 1 != j) { map[k + 1][i] = map[j][i]; map[j][i] = 0; } break; } } else if (k == 0) { if (map[k][i] == 0) { map[k][i] = map[j][i]; map[j][i] = 0; break; } } } } } } } if (dir == 2) {//up for (int i = 0; i < n; i++) { for (int j = 0; j < 20; j++) f[j] = false; for (int j = n - 1; j >= 0; j--) { if (map[j][i] != 0) { for (int k = j + 1; k < n; k++) { if (map[k][i] != 0) { if (map[k][i] == map[j][i]) { if (f[k] == false) { map[k][i] *= 2; map[j][i] = 0; f[k] = true; break; } else { if (k - 1 != j) { map[k - 1][i] = map[j][i]; map[j][i] = 0; } break; } } else { if (k - 1 != j) { map[k - 1][i] = map[j][i]; map[j][i] = 0; } break; } } else if (k == n - 1) { if (map[k][i] == 0) { map[k][i] = map[j][i]; map[j][i] = 0; break; } } } } } } } if (dir == 3) {//LEFT for (int j = 0; j < n; j++) { for (int i = 0; i < 20; i++) f[i] = false; for (int i = 0; i < n; i++) { if (map[j][i] != 0) { for (int k = i - 1; k >= 0; k--) { if (map[j][k] != 0) { if (map[j][k] == map[j][i]) { if (f[k] == false) { map[j][k] *= 2; f[k] = true; map[j][i] = 0; break; } else { if (k + 1 != i) { map[j][k + 1] = map[j][i]; map[j][i] = 0; } break; } } else { if (k + 1 != i) { map[j][k + 1] = map[j][i]; map[j][i] = 0; } break; } } else if (k == 0) { if (map[j][k] == 0) { map[j][k] = map[j][i]; map[j][i] = 0; break; } } } } } } } if (dir == 4) {//LEFT for (int j = 0; j < n; j++) { for (int i = 0; i < 20; i++) f[i] = false; for (int i = n - 1; i >= 0; i--) { if (map[j][i] != 0) { for (int k = i + 1; k < n; k++) { if (map[j][k] != 0) { if (map[j][k] == map[j][i]) { if (f[k] == false) { map[j][k] *= 2; f[k] = true; map[j][i] = 0; break; } else { if (k - 1 != i) { map[j][k - 1] = map[j][i]; map[j][i] = 0; } break; } } else { if (k - 1 != i) { map[j][k - 1] = map[j][i]; map[j][i] = 0; } break; } } else if (k == n - 1) { if (map[j][k] == 0) { map[j][k] = map[j][i]; map[j][i] = 0; break; } } } } } } } } int main() { int tc; cin >> tc; for (int t = 1; t <= tc; t++) { memset(map, 0, sizeof(map)); cin >> n; string m; cin >> m; int dir = 0; if (m == "up") { dir = 1; } else if (m == "down") dir = 2; else if (m == "left") { dir = 3; } else if (m == "right") dir = 4; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cin >> map[i][j]; } } move(dir); cout << '#' << t<<'\n'; for (int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { cout << map[i][j] << " "; } cout << endl; } } return 0; }
D4주기엔 좀문제가 너무쉬운게아닐까
한D2에서 3이 가장적절할듯
'SWexpertAcademy' 카테고리의 다른 글
6731. 홍익이의 오델로 게임 (0) 2019.08.13 1226. [S/W 문제해결 기본] 7일차 - 미로1 (0) 2019.08.13 2105. [모의 SW 역량테스트] 디저트 카페 (0) 2019.08.05 2117. [모의 SW 역량테스트] 홈 방범 서비스 (0) 2019.07.28 5656. [모의 SW 역량테스트] 벽돌 깨기 (0) 2019.07.27