My Blog

[JAVA] 프렌즈4블록 본문

알고리즘/프로그래머스

[JAVA] 프렌즈4블록

JAESG 2023. 1. 18. 22:39

https://school.programmers.co.kr/learn/courses/30/lessons/17679

 

프로그래머스

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

programmers.co.kr

package programmers;

import java.util.LinkedList;
import java.util.List;

public class kakao2018_4 {
    static String[][] data;
    static boolean[][] visited;

    public int solution(int m, int n, String[] board) {
        int answer = 0;
        data = new String[m][n];

        for (int i = 0; i < m; i++) {
            String[] board_data = board[i].split("");
            for (int j = 0; j < n; j++) {
                data[i][j] = board_data[j];
            }
        }

        while (true) {
            int num = update(m, n);
            if (num == 0) {
                break;
            }
            answer += num;
        }

        return answer;
    }

    static int update(int m, int n) {

        visited = new boolean[m][n];
        int cnt = 0;

        for (int i = 0; i < m - 1; i++) {
            for (int j = 0; j < n - 1; j++) {
                if (data[i][j].equals("0")) {
                    continue;
                }
                if (validBlock(i, j) == true) {
                    visited[i][j] = true;
                    visited[i][j + 1] = true;
                    visited[i + 1][j] = true;
                    visited[i + 1][j + 1] = true;
                }
            }

        }

        for (int i = 0; i < n; i++) {
            List<String> temp = new LinkedList<>();
            for (int j = m - 1; j >= 0; j--) {
                if (visited[j][i] == true) {
                    cnt++;
                    continue;
                }
                temp.add(data[j][i]);
            }

            for (int j = m - 1, k = 0; j >= 0; j--, k++) {
                if (k < temp.size()) {
                    data[j][i] = temp.get(k);
                } else {
                    data[j][i] = "0";
                }

            }
        }

        return cnt;

    }

    static boolean validBlock(int x, int y) {
        String ch = data[x][y];
        if (ch.equals(data[x][y + 1]) && ch.equals(data[x + 1][y]) && ch.equals(data[x + 1][y + 1])) {
            return true;
        }
        return false;
    }


    public static void main(String[] args) {
        kakao2018_4 s = new kakao2018_4();
        int m = 4;
        int n = 5;
        String[] board = {
                "CCBDE",
                "AAADE",
                "AAABF",
                "CCBBF"
        };
        System.out.println(s.solution(m, n, board));
    }
}
728x90

'알고리즘 > 프로그래머스' 카테고리의 다른 글

[JAVA] 두 수의 나눗셈  (0) 2023.02.22
[JAVA] 숫자 비교하기  (0) 2023.02.22
[JAVA] 프로그래머스 - 나머지 구하기  (0) 2023.02.21
[JAVA] n진수 게임  (0) 2023.01.19
[JAVA] 개인정보 수집 유효기간  (0) 2023.01.18
Comments