반응형
간단한 시뮬레이션 문제이다.
자신을 기준 오른쪽, 대각선아래, 아래를 확인해가며 반복하여 찾는 단순 구현 문제이다. map을 down시키는 과정에 유의하며 구현하면 쉽게 구할수 있는 문제이다.
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
78
79
80
81
82
83
84
85
|
package programmers;
public class Solution_2018카카오_프렌즈4블록 {
public static void main(String[] args) {
// int m=4;int n=5;
// String[] board= {"CCBDE", "AAADE", "AAABF", "CCBBF"};
int m=6;int n=6;
String[] board= {"TTTANT", "RRFACC", "RRRFCC", "TRRRAA", "TTMMMF", "TMMTTJ"};
System.out.println(solution(m,n,board));
}
static 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);
}
while(true) {
int[][] visit=new int[m][n];
for(int i=0;i<m-1;i++) {
for(int j=0;j<n-1;j++) {
check(i,j,visit,map);
}
}
int count=0;
for(int i=0;i<m;i++) {
for(int j=0;j<n;j++) {
if(visit[i][j]==1) {
count+=1;
map[i][j]='0';
}
}
}
if(count==0)
break;
answer+=count;
moveDown(map,m,n);
}
return answer;
}
static void check(int i,int j,int[][] visit, char[][] map) {
char ch1=map[i][j];
char ch2=map[i][j+1];
char ch3=map[i+1][j];
char ch4=map[i+1][j+1];
if(ch1!='0' && ch1==ch2 && ch1==ch3 && ch1==ch4) {
visit[i][j]=1;visit[i][j+1]=1;
visit[i+1][j]=1;visit[i+1][j+1]=1;
}
}
static void moveDown(char[][] map,int m,int n) {
for(int col=0;col<n;col++) {
for(int zero=m-1;zero>0;zero--) {
if(map[zero][col]=='0') {
for(int alp=zero-1;alp>=0; alp--) {
if(map[alp][col]!='0') {
char temp=map[alp][col];
map[alp][col]=map[zero][col];
map[zero][col]=temp;
break;
}
}
}
}
}
}
}
|
반응형
'Algorithm' 카테고리의 다른 글
[BOJ] 11967. 불켜기 (0) | 2020.05.21 |
---|---|
[Programmers] 뉴스 클러스터링 (0) | 2020.05.21 |
[Programmers] 셔틀버스 (0) | 2020.05.17 |
[BOJ] 2887. 행성 터널 (0) | 2020.05.17 |
[BOJ] 11660. 구간 합 구하기5 (0) | 2020.05.16 |