반응형
https://programmers.co.kr/learn/courses/30/lessons/17679
문제가길어서 링크로 대체합니다.
문제분석
구현을 해야할것은 딱 3가지입니다.
1. 제거할 4블록을 확인하는 로직
2. 제거할 4블록을 삭제하는 로직
3.제거한 공간을 아래로 내리는 로직
이 3가지로직을 While 반복문에 넣으면 우리가 원하는 기능이 만들어집니다.
1. 제거할 4블록을 확인하는건 i행 j열 블록을 남은 3블록과 같은지를 체크하는 로직으로 구현했다.
2. 블록삭제로직은 체크된 블록을 "-" 로 만들어둔다.
3.블록을 내리는 로직은 "-"를 윗블록과 교체하는식으로 구현했다.
윗블록과 교체를하면, 블록은 내려고가 "-"는 위로 올라가기때문이다.
문제풀이
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
import java.util.*;
class Solution {
public int solution(int m, int n, String[] board) {
int answer = 0;
char[][] table = new char[m][n];
for(int i=0;i<m;i++){
table[i]=board[m-i-1].toCharArray();
}
//몇번 지워질지 모르니 무한반복
while(true){
boolean flag=true;
boolean[][] check =new boolean[m][n];
//블록체크
for(int i=0;i<m-1;i++){
for(int j=0;j<n-1;j++){
if(table[i][j]=='-'){
continue;
}
char a =table[i][j];
if(table[i][j+1]==a&&table[i+1][j]==a&&table[i+1][j+1]==a){
check[i][j]=true;
check[i][j+1]=true;
check[i+1][j]=true;
check[i+1][j+1]=true;
flag=false;
}
}
}
//블록체크가 안됬으면 == 지울 블록이없으면 반복문 종료
if(flag){
break;
}
//체크된 블록 삭제("-"으로 변환)
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(check[i][j]){
table[i][j]='-';
answer++;
}
}
}
//블록 내리기 (윗블록과 스왑하기)
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(table[i][j]=='-'){
for(int k=i;k<m;k++){
if(table[k][j]=='-'){
continue;
}
table[i][j]=table[k][j];
table[k][j]='-';
break;
}
}
}
}
}
return answer;
}
}
|
cs |
반응형
'알고리즘 > 프로그래머스 Level2' 카테고리의 다른 글
[프로그래머스,자바] Level2: 카카오프렌즈 컬러링북 (0) | 2022.02.04 |
---|---|
[프로그래머스,자바] Level2: 2개 이하로 다른 비트 (0) | 2022.02.03 |
[프로그래머스,자바] Level2: 주차 요금 계산 (2) | 2022.01.19 |
[프로그래머스,자바] Level2: K진수에서 소수 개수 구하기 (0) | 2022.01.18 |
[프로그래머스,Java] Level2:큰 수 만들기 (업데이트) (0) | 2021.12.25 |