728x90
https://programmers.co.kr/learn/courses/30/lessons/17679
// 코드
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
import java.util.*;
class Solution {
char[][] Board;
int M, N;
int answer = 0;
// main
public int solution(int m, int n, String[] board) {
Board = new char[m][n];
M = m;
N = n;
// 사용 편의를 위해 2차원 배열로 바꿔준다.
for(int i=0; i<m; ++i) for(int j=0; j<n; ++j) Board[i][j] = board[i].charAt(j);
// 지워질 블록을 모두 지운다.
while( crashBlock() );
return answer;
}
// crashBlock
boolean crashBlock() {
boolean[][] isCrash = new boolean[M][N];
int cnt = 0;
// 탐색 : 지우질수 있는 영역을 isCrash에 표시한다.
for(int row=0; row<M-1; ++row) {
for(int col=0; col<N-1; ++col) {
if(Board[row][col] == '0') continue;
if(check(row, col)) {
isCrash[row][col] = true;
isCrash[row][col+1] = true;
isCrash[row+1][col] = true;
isCrash[row+1][col+1] = true;
}
}
}
// 지워주고 땡긴다
for(int col=0; col<N; ++col) {
List<Character> crashList = new ArrayList<>();
for(int row=M-1; row > -1; --row) {
// 충돌되는 블록수를 카운트만한다.
if( isCrash[row][col] ) {
++cnt;
continue;
}
// 지워지지 않는 블록들만 넣어준다.(땡겨주기 위해)
crashList.add(Board[row][col]);
}
// 실질적으로 땡겨준다.
for(int row=M-1, k=0; row > -1; --row, ++k) {
if(k < crashList.size()) Board[row][col] = crashList.get(k);
else Board[row][col] = '0';
}
}
answer += cnt;
return cnt > 0 ? true : false;
}
// check : 오른쪽, 아래, 오른쪽 대각선 아래 체크
boolean check(int row, int col) {
return ( (Board[row][col] == Board[row][col+1]) && (Board[row][col] == Board[row+1][col]) && (Board[row][col] == Board[row+1][col+1]) ) ? true : false;
}
}
|
cs |
반응형
'CS > 알고리즘_KAKAO BLIND RECRUITMENT' 카테고리의 다른 글
2018 KAKAO BLIND RECRUITMENT : [3차] 방금그곡 (0) | 2021.11.05 |
---|---|
2020 KAKAO BLIND RECRUITMENT : 문자열 압축 (0) | 2021.11.04 |
2018 KAKAO BLIND RECRUITMENT : [3차] 파일명 정렬 (0) | 2021.11.03 |
2019 KAKAO BLIND RECRUITMENT : 블록 게임 (0) | 2021.11.02 |
2018 KAKAO BLIND RECRUITMENT : [3차] n진수 게임 (0) | 2021.11.01 |