Candy Crush

유승선 ·2024년 2월 15일
0

LeetCode

목록 보기
104/121

복습 차원에서 예전에 본사에서 풀어봤던 문제를 다시 경험했다. 확실히 코딩 실력이 그래도 감이 돌아오고 있구나를 조금 경험했다.

처음 풀었을때만 해도 이거는 무조건 이렇게 풀어야해! 생각했지만 로직을 생각하니 이렇게 푸는게 더 깔끔하고 좋을거 같다는 마음이 들었다.

처음에는 오류가 몇개 났는데 다행히 금방 찾을 수 있었고, 조건을 함수로 빼면서 그나마 코드가 좀 깔끔해진거 같다.

class Solution {

int N,M; 
public:
    bool check(int i, int j, int flag, vector<vector<int>>& board){
        if(flag == 0) return (i + 1 < N && i + 2 < N && board[i][j] != 0 && board[i][j] == board[i+1][j] && board[i][j] == board[i+2][j]); 
        return (j + 1 < M && j + 2 < M && board[i][j] != 0 && board[i][j] == board[i][j+1] && board[i][j] == board[i][j+2]); 
    }

    void dropTop(int x, int y, vector<vector<int>>& board){
        for(int i = x; i >= 0; i--){
            //board[i][y] = 0; 
            if(i - 1 >= 0){
                board[i][y] = board[i-1][y];
                board[i-1][y] = 0; 
            } else{
                board[i][y] = 0; 
            }
        }
    }

public:
    vector<vector<int>> candyCrush(vector<vector<int>>& board) {
        //vector<vector<bool>> visited(board.size(), vector<bool>(board[0].size(),false)); 
        bool visited[51][51]; 
        N = board.size(), M = board[0].size(); 
        bool flag = true; 

        while(flag){
            flag = false; 

            memset(visited,false,sizeof(visited)); 
            for(int i = 0; i < board.size(); i++){
                for(int j = 0; j < board[0].size(); j++){
                    if(check(i,j,0, board)){
                        visited[i][j] = true;
                        visited[i+1][j] = true; 
                        visited[i+2][j] = true; 
                    }

                    if(check(i,j,1, board)){
                        visited[i][j] = true;
                        visited[i][j+1] = true;
                        visited[i][j+2] = true; 
                    }
                }
            }

            for(int i = 0; i < board.size(); i++){
                for(int j = 0; j < board[i].size(); j++){
                    if(visited[i][j]){
                        flag = true; 
                        dropTop(i,j,board); 
                    }
                }
            }

    

        }
        return board; 
    }
};
profile
성장하는 사람

0개의 댓글