728x90
좌표 설정 (nx = x+dx[k])를 잘못해서
( (ny = x+dy[k])이런 식으로 실수함 )
자꾸 IndexOutOfRangeException나고 잘못나옴.. 그냥 빠르게 하는 것보다
확실하게 하면서 속도 늘려야함.. 정확성 100%를 유지하면서 속도를 늘려야함
그게 아니면 속도 의미 없음 그냥 사고나기 딱 좋음
IndexOutOfRangeException이 너무 나옴.. shiftBoard에서도 빠다리 너무남 엄청헤맷다..
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
import java.awt.Point;
import java.util.*;
class Solution {
private static char[][] board;
private static Stack<Point> st;
private static int m;
private static int n;
private static int answer;
static int[] dx = { 0, 1, 0, 1 };
static int[] dy = { 0, 0, 1, 1 };
public int solution(int m, int n, String[] boardStr) {
this.m = m;
this.n = n;
board = new char[m][n];
st = new Stack<>();
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
board[i][j] = boardStr[i].charAt(j);
}
}
while(true){
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
findBoard(i,j);
}
}
// viewBoard();
if(st.isEmpty()){
break;
}
// System.out.println(st.size());
deleteBoard();
shiftBoard();
// viewBoard();
}
return answer;
}
private void findBoard(int x, int y){
for(int k=0; k<4; k++){
int nx = x+dx[k];
int ny = y+dy[k];
if(!(0<=nx && nx<m && 0<=ny && ny<n &&
board[x][y]!=' ' && board[x][y] == board[nx][ny]) ){
return;
}
}
st.push(new Point(x,y));
}
private void deleteBoard(){
while(!st.isEmpty()){
Point p = st.pop();
for(int k=0; k<4; k++){
if(board[p.x+dx[k]][p.y+dy[k]]!=' '){
board[p.x+dx[k]][p.y+dy[k]] = ' ';
answer++;
}
}
}
}
private void shiftBoard(){
for(int i=m-2; i>=0; i--){
for(int j=0; j<n; j++){
if(board[i][j]!=' ' && board[i+1][j]==' '){
int ni = i+1;
for( ; ni<m; ni++){
if(board[ni][j]!=' '){
break;
}
}
ni--;
board[ni][j] = board[i][j];
board[i][j] = ' ';
}
}
}
}
private void viewBoard(){
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
System.out.print(board[i][j]+" ");
}
System.out.println();
}
System.out.println();
}
}
|
cs |
'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][JAVA] 삼각 달팽이 (구현) (0) | 2022.04.03 |
---|---|
[프로그래머스][JAVA] 2개 이하로 다른 비트 (비트마스크?) (0) | 2022.04.02 |
[프로그래머스][JAVA] 피로도 (DFS) (0) | 2022.04.02 |
[프로그래머스][JAVA] 큰 수 만들기 (스택, 그리디) (0) | 2022.03.31 |
[프로그래머스][JAVA] 카펫 (완전탐색) (0) | 2022.03.31 |