ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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이 가장적절할듯

    댓글

Designed by Tistory.