Algorithm/programmers

[2018 카카오 블라인드 1차]프렌즈4블록

마닐라 2022. 4. 11. 22:39

📍 문제 설명

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

 

코딩테스트 연습 - [1차] 프렌즈4블록

프렌즈4블록 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 "프렌즈4블록". 같은 모양의 카카오프렌즈 블록이 2×2 형태로 4개가 붙

programmers.co.kr

 

💡 접근

2X2 형태로 블록이 이어져있으면 지워주면 되는데 중복되는 값을 고려해야했다.

블록이 지워지지 않을 때 까지 모든 지점을 탐색해서 2X2인 부분을 방문처리 해놓고 블록을 아래로 떨어뜨리면서 카운트를 해주는 방식으로 구현하면 됐다.

 

 

👩‍💻 코드

import java.io.*;
import java.util.*;

public class Solution {
    public int solution(int m, int n, String[] board) {
        int answer = 0;
        char[][] map = new char[m][n];

        for(int i = 0; i < m; i++) {
            for(int j = 0; j < n; j++) {
                map[i][j] = board[i].charAt(j);
            }
        }
        boolean flag = true;

        while(flag) {
            flag = false;
            boolean[][] visited = new boolean[m][n];
            for(int i = 0; i < m-1; i++) {
                for(int j = 0; j < n-1; j++) {
                    //빈칸이면 넘어가기
                    if(map[i][j] == 'X') continue;
                    //4블록이 같은 블록이면 지워주기(2X2는 무조건 지워짐)
                    if(map[i][j] == map[i+1][j] && map[i+1][j] == map[i+1][j+1] && map[i+1][j+1] == map[i][j+1] && map[i][j+1] == map[i][j]) {
                        visited[i][j] = true;
                        visited[i+1][j] = true;
                        visited[i+1][j+1] = true;
                        visited[i][j+1] = true;
                        flag = true;
                    }
                }
            }

            //블록 아래로 떨어뜨리기
            for(int i = 0; i < n; i++) {
                for(int j = 0; j < m; j++) {
                    if(visited[j][i]) {
                        answer++;
                        //현재칸의 -1칸부터 0칸까지 당기기 
                        for(int k = j-1; k >= 0; k--) {
                            map[k+1][i] = map[k][i];
                            map[k][i] = 'X';
                        }
                    }
                }
            }
        }

        return answer;
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        Solution s = new Solution();
        String[] board = {"TTTANT", "RRFACC", "RRRFCC", "TRRRAA", "TTMMMF", "TMMTTJ"};
        s.solution(6,6, board);
    }
}