Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
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
Archives
Today
Total
관리 메뉴

csct3434

[level 2] [1차] 프렌즈4블록 - 17679 본문

프로그래머스

[level 2] [1차] 프렌즈4블록 - 17679

csct3434 2024. 2. 28. 20:00

문제 링크

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

class Solution {

    public int solution(int m, int n, String[] b) {
       char[][] board = new char[m][n];
       for (int i = 0; i < m; i++) {
          board[i] = b[i].toCharArray();
       }
       return solve(m, n, board);
    }

    public int solve(int m, int n, char[][] board) {
       int count = 0;
       boolean[][] mark = new boolean[m][n];

       int[] dx = {0, 0, 1, 1};
       int[] dy = {0, 1, 0, 1};

       for (int x = 0; x < m - 1; x++) {
          for (int y = 0; y < n - 1; y++) {
             char friend = board[x][y];
             if (friend == '.') {
                continue;
             }

             boolean pop = true;
             for (int i = 0; i < 4; i++) {
                if (friend != board[x + dx[i]][y + dy[i]]) {
                   pop = false;
                }
             }

             if (pop) {
                for (int i = 0; i < 4; i++) {
                   mark[x + dx[i]][y + dy[i]] = true;
                }
             }
          }
       }

       for (int x = 0; x < m; x++) {
          for (int y = 0; y < n; y++) {
             if (mark[x][y]) {
                count++;
                board[x][y] = '.';
             }
          }
       }

       for (int y = 0; y < n; y++) {
          for (int x = m - 2; x >= 0; x--) {
             if (board[x][y] == '.') {
                continue;
             }

             for (int i = m - 1; i > x; i--) {
                if (board[i][y] == '.') {
                   board[i][y] = board[x][y];
                   board[x][y] = '.';
                }
             }
          }
       }

       if (count == 0) {
          return 0;
       }
       return count + solve(m, n, board);
    }
}