본문 바로가기

코딩 문제/백준

백준 - 1780번

728x90

 

풀이

 

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.StringTokenizer;

 

public class Main {

 

      static int one = 0; // -1 개수

      static int two = 0; // 0 개수

      static int three = 0; // 1 개수

      public static void main(String[] args) throws NumberFormatException, IOException {

 

            int[][] arr;

            String[] arr2;

            String str = "";

            BufferedReader br = new BufferedReader ( new InputStreamReader (System.in));

            int num = Integer.parseInt(br.readLine());

            boolean check = true; // 같은 값인지 체크

            int checkNum = 2; // 첫 값 등록 변수

            arr = new int[num][num];

 

            // 배열에 입력받기

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

                  str = br.readLine();

                  arr2 = str.split(" ");

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

                        arr[i][j] = Integer.parseInt(arr2[j]);

                        if(checkNum == 2) {

                              checkNum = arr[i][j];

                        }else {

                              if(checkNum != arr[i][j]) {

                                    check = false;

                              }

                        }

                  }

            }

            if(check != true) {

                  Search(arr, num);

            }else {

                  if(checkNum == 0){

                        two += 1;

                  }else if(checkNum == 1){

                        three += 1;

                  }else{

                        one += 1;

                  }

            }

 

            System.out.println(one);

            System.out.println(two);

            System.out.println(three);

      }

 

      private static void Search(int[][] arr, int size) {

            int[][] smallArr; // 나눈 배열

            int count = 0;

            int x = 0, y = 0; // 행 시작점, 열 시작점

            int a = 0, b = 0; // 나눈 배열 인덱스

            boolean check = true; // 같은 값인지 체크

            int checkNum = 2; // 첫 값 등록 변수

            if(size > 3) {

                  int smallSize = size/3;

                  smallArr = new int[smallSize][smallSize];

                  // 나눈 배열 생성하기

                  while(count < 9) {

                        count++;

                        check = true;

                        checkNum = 2;

                        a = 0;

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

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

                                    smallArr[a][b] = arr[i][j];

                                    if(checkNum == 2) {

                                          checkNum = arr[i][j];

                                    }else {

                                          if(checkNum != arr[i][j]) {

                                                check = false;

                                          }

                                    }

                                    b++;

                              }

                              a++;

                              b = 0;

                        }

                        if(check != true) {

                              Search(smallArr, smallSize);

                        }else {

                              if(checkNum == 0){

                                    two += 1;

                              }else if(checkNum == 1){

                                    three += 1;

                              }else{

                                    one += 1;

                              }

                        }

                        if(count%3 == 0) {

                              x += smallSize;

                              y = 0;

                        }else {

                              y += smallSize;

                        }

                  }

            }else {

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

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

                              if(arr[i][j] == 0){

                                    two++;

                              }else if(arr[i][j] == 1){

                                    three++;

                              }else{

                                    one++;

                              }

                        }

                  }

            }

      }

}

'코딩 문제 > 백준' 카테고리의 다른 글

백준 - 2890번  (0) 2021.03.15
백준 - 2504번  (0) 2021.03.15
백준 - 1769번  (0) 2021.03.15
백준 - 1074번  (0) 2021.03.15
백준 - 1059번  (0) 2021.03.15