본문 바로가기

Programmers/Level2

[1차] 프렌즈4블록

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
class Solution {
 
    public int solution(int m, int n, String[] board) {
        int answer = 0;
        char[][] c_board = new char[m][n];
        int[] pos = new int[n]; // 블록이 내려올 위치
        boolean flag = true;
 
        // char array로 변환
        for (int i = 0; i < m; i++)
            c_board[i] = board[i].toCharArray();
        // pos 초기화
        for (int i = 0; i < n; i++)
            pos[i] = -1;
 
        // 없앨 블록이 있을 경우에만 진행
        while (flag) {
            char[][] chk = new char[m][n];
            flag = false;
            for (int i = 0; i < m - 1; i++) {
                for (int j = 0; j < n - 1; j++) {
                    // 현재 블록과 오른쪽, 아래, 오른쪽 아래 블록이 모두 일치하는지 비교
                    if (c_board[i][j] != '0' && c_board[i][j + 1!= '0' && c_board[i + 1][j] != '0'
                            && c_board[i + 1][j + 1!= '0') {
                        if (c_board[i][j] == c_board[i][j + 1&& c_board[i][j] == c_board[i + 1][j]
                                && c_board[i][j] == c_board[i + 1][j + 1]) {
                            chk[i][j] = chk[i][j + 1= chk[i + 1][j] = chk[i + 1][j + 1= '1';
                            pos[j] = pos[j + 1= i + 1;
                            flag = true;
                        }
                    }
                }
            }
 
            if (flag) {
                // chk에 따라서 블록을 정렬
                for (int i = 0; i < n; i++) {
                    for (int j = pos[i]; j >= 0; j--) {
                        if (chk[j][i] != '1') {
                            c_board[pos[i]--][i] = c_board[j][i];
                        } else {
                            answer++;
                        }
                        c_board[j][i] = '0';
                    }
                }
            }
        }
        return answer;
    }
}
cs

작동 방식

1. 없앨 블록 찾아서 체크

2. 체크한 블록 제거 및 카운트, 정렬

'Programmers > Level2' 카테고리의 다른 글

튜플  (0) 2021.07.28
후보키  (0) 2021.07.28
점프와 순간 이동  (0) 2021.07.27
구명보트  (0) 2021.07.26
영어 끝말잇기  (0) 2021.07.25