본문 바로가기

코딩 문제/프로그래머스

프로그래머스 - 실력체크 - 레벨 2 - 6번째

728x90

 

풀이

( 이클립스로 재코딩하였습니다. )

 

import java.util.*;

 

public class javatest {

 

      static int x = 0; // 행

      static int y = 0; // 열

 

      public static void main(String[] args) {

 

            String[] oneArr; // 입력받은 문자열 배열

            String[] smallArr; // oneArr의 원소를 담을 배열

            int count = 0;

 

            Scanner scan = new Scanner(System.in);

 

            x = Integer.parseInt(scan.nextLine()); // 행 할당

            y = Integer.parseInt(scan.nextLine()); // 열 할당

            String[][] twoArr = new String[x][y]; // 2차원 배열 twoArr 초기화

            oneArr = scan.nextLine().split(","); // 입력받은 배치 문자들

 

            // 2차원 배열에 할당

            for(int i=0; i<x; i++) {

                  smallArr = oneArr[i].split("");

                  for(int j=0; j<y; j++) {

                        twoArr[i][j] = smallArr[j];

                  }

            }

 

            Game(twoArr);

            for(int i=0; i<x; i++) {

                  for(int j=0; j<y; j++) {

                        if("0".equals(twoArr[i][j])) {

                              count++;

                        }

                  }

            }

            System.out.println(count);

      }

 

      private static void Game(String[][] twoArr) {

            int state = 1;

            String str = "";

            String[] arr;

            while(state != 0) {

                  state = 0;

                  str = "";

                  // 사라질 영역 찾기

                  for(int i=0; i<x-1; i++) {

                        for(int j=0; j<y-1; j++) {

                              if(twoArr[i][j].equals(twoArr[i][j+1]) &&

                                    twoArr[i][j].equals(twoArr[i+1][j]) &&

                                    twoArr[i][j].equals(twoArr[i+1][j+1]) && !"0".equals(twoArr[i][j])

                              ) {

                                    if("".equals(str)) {

                                          str = i + "," + j;

                                    }else {

                                          str += "," + i + "," + j;

                                    }

                                    state = 1;

                              }

                        }

                  }

                  if(!"".equals(str)) {

                        // 찾은 영역 배열로 만들기

                        arr = str.split(",");

                        // 찾은 영역 제거

                        for(int i=0; i<arr.length; i+=2) {

                              int a = Integer.parseInt(arr[i]);

                              int b = Integer.parseInt(arr[i+1]);

                              twoArr[a][b] = "0";

                              twoArr[a+1][b] = "0";

                              twoArr[a][b+1] = "0";

                              twoArr[a+1][b+1] = "0";

                        }

                        // 남은 문자 정렬

                        for(int i=0; i<y; i++) {

                              str = "";

                              int num = x-1;

                              for(int j=x-1; j>=0; j--) {

                                    if(!"0".equals(twoArr[j][i])) {

                                          twoArr[num][i] = twoArr[j][i];

                                          num--;

                                    }

                              }

                              for(int j=num; j>=0; j--) {

                                    twoArr[j][i] = "0";

                              }

                        }

                  }

            }

      }

}

 

결과