📍 문제 설명
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);
}
}
'Algorithm > programmers' 카테고리의 다른 글
[2018 카카오 블라인드 3차]방금그곡 (0) | 2022.04.13 |
---|---|
[2018 카카오 블라인드 1차]캐시 (0) | 2022.04.12 |
[2021 카카오 블라인드]순위 검색★ (0) | 2022.04.02 |
[2019 카카오 인턴십]튜플 (0) | 2022.04.01 |
[2021 카카오 인턴십]거리두기 확인하기 (0) | 2022.03.28 |