1. 문제
https://programmers.co.kr/learn/courses/30/lessons/17679#qna
코딩테스트 연습 - [1차] 프렌즈4블록
프렌즈4블록 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 프렌즈4블록. 같은 모양의 카카오프렌즈 블록이 2×2 형태로 4개가 붙
programmers.co.kr
2. 나의 풀이
class Solution {
public int solution(int m, int n, String[] board) {
int answer = 0;
String [][] arr = new String [m][n];
for(int i = 0; i < board.length; i = i + 1) {
arr[i] = board[i].split("");
}
/*
for(String [] imsi : arr) {
System.out.println(Arrays.toString(imsi));
}
*/
answer = sackgegaesu(arr, new boolean[m][n], answer);
return answer;
}
int sackgegaesu(String [][] board, boolean [][] visited, int answer) {
int su = 0;
for(int i = 0; i < board.length - 1; i = i + 1) {
for(int j = 0; j < board[i].length - 1; j = j + 1) {
if(board[i][j].equals("0")) {
continue;
}
if(!board[i][j].equals(board[i][j + 1])) {
continue;
}
if(!board[i][j].equals(board[i + 1][j])) {
continue;
}
if(!board[i][j].equals(board[i + 1][j + 1])) {
continue;
}
su += 1;
visited[i][j] = true;
visited[i][j + 1] = true;
visited[i + 1][j] = true;
visited[i + 1][j + 1] = true;
}
}
answer = 0;
for(int i = 0; i < board.length; i = i + 1) {
for(int j = 0; j < board[i].length; j = j + 1) {
if(visited[i][j] == true) {
board[i][j] = "0";
answer += 1;
}
}
}
if(su == 0) {
return answer;
}
for(int i = board.length - 1; i >= 0; i = i - 1) {
for(int j = board[i].length - 1; j >= 0; j = j - 1) {
int imsi = 0;
for(int p = i + 1; p < board.length; p = p + 1) {
if(visited[p][j] == true) {
imsi += 1;
}
}
String str = board[i][j];
board[i][j] = board[i + imsi][j];
board[i + imsi][j] = str;
boolean bool = visited[i][j];
visited[i][j] = visited[i + imsi][j];
visited[i + imsi][j] = bool;
}
}
/*
for(String [] imsi : board) {
System.out.println(Arrays.toString(imsi));
}
for(boolean [] imsi : visited) {
System.out.println(Arrays.toString(imsi));
}
System.out.println("answer : " + answer);
*/
answer = sackgegaesu(board, visited, answer);
return answer;
}
}
3. 다른 사람 풀이
class Solution {
public int solution(int m, int n, String[] board) {
int answer = 0;
char[][] boardArr = new char[m+2][n+2];
int answerbefor = -1;
for(int i =0; i<m; i++){
for(int j =0; j<n; j++){
boardArr[i][j]= board[i].toCharArray()[j];
}
}
while(true){
if(answer == answerbefor){
break;
}
answerbefor = answer;
boolean[][] boardCleaner = new boolean[m+2][n+2];
for(int i =0; i<m; i++){
for(int j =0; j<n; j++){
if(boardArr[i][j]==boardArr[i][j+1]&&boardArr[i][j]!=' '){
if(boardArr[i][j]==boardArr[i+1][j+1]){
if(boardArr[i][j]==boardArr[i+1][j]){
boardCleaner[i][j] = true;
boardCleaner[i+1][j] = true;
boardCleaner[i+1][j+1] = true;
boardCleaner[i][j+1] = true;
}
}
}
//System.out.print(boardArr[i][j] );
}
// System.out.println();
// System.out.println();
}
// System.out.println();
for(int i =0; i<m; i++){
for(int j =0; j<n; j++){
if(boardCleaner[i][j]){
boardArr[i][j] = ' ';
answer++;
boardCleaner[i][j] = false;
}
}
}
// System.out.println("anser : "+answer);
// for(int i =0; i<m; i++){
// for(int j =0; j<n; j++){
// System.out.print(boardArr[i][j] );
// }
// // System.out.println();
// }
// System.out.println();
for(int k = 0; k<m; k++){
for(int i =m; i>0; i--){
for(int j =0; j<n; j++){
if(boardArr[i][j]==' '){
// System.out.print("!");
boardArr[i][j] = boardArr[i-1][j];
boardArr[i-1][j] = ' ';
}
}
//System.out.println();
}
}
// for(int i =0; i<m; i++){
// for(int j =0; j<n; j++){
// System.out.print(boardArr[i][j] );
// }
// System.out.println();
// }
// System.out.println();
}
return answer;
}
}
'알고리즘 공부 > 프로그래머스' 카테고리의 다른 글
(Java)프로그래머스 코딩테스트 연습 - 2019 KAKAO BLIND RECRUITMENT - 오픈채팅방 (0) | 2020.12.01 |
---|---|
(Java)프로그래머스 코딩테스트 연습 - 2018 KAKAO BLIND RECRUITMENT - [1차] 캐시 (0) | 2020.11.30 |
(Java)프로그래머스 코딩테스트 연습 - 2018 KAKAO BLIND RECRUITMENT - [1차] 뉴스 클러스터링 (0) | 2020.11.29 |
(Java)프로그래머스 코딩테스트 연습 - 2017팁스타운 - 예상 대진표 (0) | 2020.11.29 |
(Java)프로그래머스 코딩테스트 연습 - Summer/Winter Coding(~2018) - 영어 끝말잇기 (0) | 2020.11.29 |