https://school.programmers.co.kr/learn/courses/30/lessons/17679
문제 분류 : 코딩테스트 연습 > KAKAO BLIND RECRUITMENT > [1차] 프렌즈4블록
난이도 : 2
정답 코드
import java.util.*;
class Solution { // m은 행 n은 열
static int [] arx ={-1,0,-1}; // 아래 오른쪽 (왼쪽아래) 순서대로
static int [] ary ={0,1,1};
static int [][] map;
static class node{
int x; int y;
public node(int x, int y){
this.x = x; this.y = y;
}
}
static int M;
static int N;
public int solution(int m, int n, String[] board) {
int answer = 0;
map = new int [m][n];
M = m;
N = n;
// System.out.println('A' - '0'); 17
// System.out.println('Z' - '0'); 42
// A = 1 ~ Z = 26
for(int i = 0; i < m; i++){
String input = board[i];
for(int j = 0; j < n; j++){
map[i][j] = input.charAt(j) - '0' - 16;
}
}
// System.out.println(Arrays.deepToString(map));
while(true){
Stack<node> stack = new Stack<>();
// 1. 삭제 블록 check
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
if(map[i][j] == 0) continue;
boolean flag = true;
for(int k = 0; k < 3; k++){
int nx = i + arx[k];
int ny = j + ary[k];
if(0 <= nx && 0 <= ny && nx < m && ny < n){
if(map[nx][ny]!= map[i][j]) flag = false;
}
else flag = false;
}
if(flag){
stack.push(new node(i, j));
for(int k = 0; k < 3; k++){
int nx = i + arx[k];
int ny = j + ary[k];
stack.push(new node(nx, ny));
}
}
}
}
if(stack.isEmpty()) break;
updateMap(stack);
stack.clear();
}
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
if(map[i][j] == 0) answer++;
}
}
return answer;
}
public static void updateMap(Stack<node> stack){
// System.out.println(stack.size());
while(!stack.isEmpty()){
node cur = stack.pop();
if(map[cur.x][cur.y] == 0) continue;
map[cur.x][cur.y] = 0;
}
// System.out.println(Arrays.deepToString(map));
for(int i = 0; i < N; i++){
StringBuilder sb = new StringBuilder();
for(int j = M - 1; j >= 0; j--){
if(map[j][i] == 0) continue;
sb.append(map[j][i]).append(" ");
}
String temp = sb.toString();
if(sb.length() == 0){
continue;
}
String [] sp = temp.split(" ");
int cur = M - 1;
for(int j = 0; j < sp.length; j++){
map[cur][i] = Integer.parseInt(sp[j]);
cur--;
}
for(int j = 0; j < M - sp.length; j++){
map[j][i] = 0;
}
}
}
}
'Algorithm > Programmers Java' 카테고리의 다른 글
Java 프로그래머스 영어 끝말잇기 (0) | 2024.03.01 |
---|---|
Java 프로그래머스 구명보트 (2) | 2024.03.01 |
Java 프로그래머스 [1차] 캐시 (0) | 2024.03.01 |
Java 프로그래머스 전화번호 목록 (0) | 2024.02.29 |
Java 프로그래머스 배달 (0) | 2024.02.29 |