반응형
문제 정보는 아래 링크를 확인해주세요!
[프렌즈4블록]
문제 접근 방법
- 이 문제 또한 설명을 잘 따라가면 되는 문제다.
- 우선 기존에 들어온 1차원 String 배열을 직관적으로 다루기 쉽게 2차원 char 배열로 만들어준다.
- (1,1)의 요소부터 현재, 아래, 오른쪽, 오른쪽 아래의 블록을 검사하고
- 이 때, 4개의 블록을 바로 지우게 되면 겹쳐져있는 블록을 확인할 수 없으므로
- 4개의 블록을 지우기위한 2차원 boolean 배열에 인덱스 셋팅
- (1,2)부터 다시 현재,아래,오른쪽,오른쪽 아래를 검사하고 2차원 boolean 배열에 셋팅
- (n-1,n-1)까지 검사
- 검사를 마치면, 다시 for문을 돌면서 2차원 boolean 배열을 검사하고,
- 이 때, 지워줄 값이 셋팅 되어있는 곳을 지워준다.
- 해당 블록을 지우면서 해당 블록보다 위에있는 블록들을 아래로 내려준다.
- 이것이 하나의 작업단위!
- 모든 검사가 끝나면 다시 처음으로 돌아가서 더이상 지워줄 블록이 없을 때까지 작업을 반복한다.
[소스 코드]
package algorithm.programmers;
import java.util.*;
/*
* 2018 KAKAO BLIND RECRUITMENT
* [1차] 프렌즈 4블록
* */
public class Pro17679 {
public int solution(int m, int n, String[] board) {
char[][] map = new char[n][m];
for (int i = 0; i < board.length; i++) {//String에서 char 배열로 바꿔줌
for (int j = 0; j < board[i].length(); j++) {
map[j][i] = board[i].charAt(j);
}
}
int answer = 0;
boolean flag = true;
while(flag) {
flag = false;//지워줄 블록이 있는지 체크하기 위함
int[][] visited = new int[n][m];//지워줄 블록을 표시해줄 배열
//현재,아래,오른쪽,오른쪽 아래 블록을 검사
//현재에서 +1칸을 검사하기 때문에 범위를 배열 길이-1로 잡아줌
for (int i = 0; i < map.length-1; i++) {
for (int j = 0; j < map[i].length-1; j++) {
if (map[i][j] == '0') continue;//비어있는 블록
//4블록 검사
if (map[i][j] == map[i+1][j] && map[i+1][j] == map[i+1][j+1]
&& map[i][j+1] == map[i+1][j+1] && map[i][j+1] == map[i][j]) {
//지워줄 배열을 셋팅
visited[i][j] = 1;
visited[i+1][j] = 1;
visited[i+1][j+1] = 1;
visited[i][j+1] = 1;
flag = true;//지워줄 블록이 있으므로,
}
}
}
//블록을 지우고, 비어있는 곳을 채워주는 작업
for (int i = 0; i < visited.length; i++) {
for (int j = 0; j< visited[i].length; j++) {
if (visited[i][j] == 1) {//지워줄 블록이면
answer++;
for (int k = j-1; k >= 0; k--) {//현재 블록의 열에 해당하는 부분을 다시 셋팅
map[i][k+1] = map[i][k];
map[i][k] = '0';//비어있는 블록을 의미
}
}
}
}
}
return answer;
}
}
반응형
LIST
'알고리즘 > 연습문제' 카테고리의 다른 글
2018 카카오 블라인드 코딩테스트 - [1차] 비밀지도 (feat. Java) (0) | 2020.05.13 |
---|---|
2018 카카오 블라인드 코딩테스트 - [1차] 캐시 (feat. Java) (0) | 2020.05.13 |
2018 카카오 블라인드 코딩테스트 - [1차] 셔틀버스 (feat. Java) (0) | 2020.05.13 |
2018 카카오 블라인드 코딩테스트 - [1차] 뉴스 클러스터링 (feat. Java) (0) | 2020.05.13 |
2018 카카오 블라인드 코딩테스트 - [1차] 추석 트래픽 (feat. Java) (0) | 2020.05.13 |