티스토리 뷰
728x90
완전 깡구현 문제.
터진 공간을 찾아 위에서부터 블럭을 끌어와 채우는 방식이 평소에 생각해보지 못 한 방식이라 재밌었다.
이번에도 역시 2차원 배열을 다룰때 인덱스때문에 꽤 애를 먹었는데
0, 0에서 시작하는 순회 이외에 다른 방식으로 순회하는 방법 연습을 더 해야할듯하다.
import java.util.*;
class Solution {
char[][] matrix;
List<Integer> yList = new ArrayList<>();
List<Integer> xList = new ArrayList<>();
void squareFinder(int i, int j) {
var pos = matrix[i][j];
if (pos == matrix[i + 1][j] &&
pos == matrix[i][j + 1] &&
pos == matrix[i + 1][j + 1]) {
yList.add(i); yList.add(i + 1); yList.add(i); yList.add(i + 1);
xList.add(j); xList.add(j); xList.add(j + 1); xList.add(j + 1);
}
}
void moveBlockToBottom(int i, int j) {
if (matrix[i][j] == '0') {
var idx = i;
while (idx-- > 0) {
//터진 공간 위에 블럭이 있으면
if (matrix[idx][j] != '0') {
matrix[i][j] = matrix[idx][j];
matrix[idx][j] = '0';
break;
}
}
}
}
public int solution(int m, int n, String[] board) {
int answer = 0;
matrix = new char[m][n];
for (var i = 0; i < board.length; i++) {
matrix[i] = board[i].toCharArray();
}
while (true) {
//2X2 찾기
for (var i = 0; i < matrix.length - 1; i++) {
for (var j = 0; j < matrix[0].length - 1; j++) {
if (matrix[i][j] == '0') continue;
squareFinder(i,j);
}
}
//2X2가 발견되지 않으면 answer 반환.
if (yList.size() == 0) return answer;
//점수 계산
for (var i = 0; i < yList.size(); i++) {
if (matrix[yList.get(i)][xList.get(i)] == '0') continue;
matrix[yList.get(i)][xList.get(i)] = '0';
answer++;
}
yList.clear();
xList.clear();
//y값 밑으로 내리기.
//x축을 먼저 돌며 y축의 아래서부터 터진 공간이 있는지 확인.
for (var j = 0; j < n; j++) {
for (var i = m - 1; i >= 0; i--) {
//터진 공간을 발견하면
moveBlockToBottom(i, j);
}
}
}
}
}
'CodingTest' 카테고리의 다른 글
2. Add Two Numbers (Java, LinkedList, Leetcode) (0) | 2022.08.31 |
---|---|
199. Binary Tree Right Side View (Java, recursion, Leetcode) (0) | 2022.08.29 |
삼각 달팽이 (Java, 2D, 프로그래머스) (0) | 2022.08.19 |
가장 큰 수 (Java, Comparator, 프로그래머스) (0) | 2022.08.18 |
메뉴 리뉴얼 (Java, DFS, 프로그래머스) (0) | 2022.08.16 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- RequestParam
- IDE
- 아키텍처
- 레디스
- 배포
- RequestBody
- ModelAttribute
- 도커
- 루나빔
- lunarvim
- RequestPart
- Dap
- JavaScript
- vim
- neovim
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함