본문 바로가기

코딩 문제/백준

백준 - 1303번

728x90

 

풀이

 

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

 

public class Main {

 

      static String[][] field;

      static int a = 0; // 가로

      static int b = 0; // 세로

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

 

            int wCount = 0; // W 위력

            int bCount = 0; // B 위력

            int num = 0;

            String str = "";

            String[] arr;

 

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

            str = br.readLine();

            arr = str.split(" ");

            a = Integer.parseInt(arr[0]);

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

            field = new String[b][a]; // 전체 배열 초기화

            // 배열에 값 넣기

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

                  str = br.readLine();

                  arr = str.split("");

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

                        field[i][j] = arr[j];

                  }

            }

 

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

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

                        if("W".equals(field[i][j])) {

                              num = Find("W", i, j);

                              wCount += (num * num);

                        }else if("B".equals(field[i][j])) {

                              num = Find("B", i, j);

                              bCount += (num * num);

                        }

                  }

            }

            System.out.println(wCount + " " + bCount);

      }

      // 병사 위력 구하기

      private static int Find(String str, int i, int j) {

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

            int count = 1;

            if(i==0) {

                  if(str.equals(field[i+1][j])) {

                        count += Find(str, i+1, j);

                  }

            }else if(i==(b-1)){

                  if(str.equals(field[i-1][j])) {

                        count += Find(str, i-1, j);

                  }

            }else {

                  if(str.equals(field[i+1][j])) {

                        count += Find(str, i+1, j);

                  }

                  if(str.equals(field[i-1][j])) {

                        count += Find(str, i-1, j);

                  }

            }

            if(j==0) {

                  if(str.equals(field[i][j+1])) {

                        count += Find(str, i, j+1);

                  }

            }else if(j==(a-1)){

                  if(str.equals(field[i][j-1])) {

                        count += Find(str, i, j-1);

                  }

            }else {

                  if(str.equals(field[i][j+1])) {

                        count += Find(str, i, j+1);

                  }

                  if(str.equals(field[i][j-1])) {

                        count += Find(str, i, j-1);

                  }

            }

            return count;

      }

}

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

백준 - 2667번  (0) 2021.03.25
백준 - 1325번  (0) 2021.03.17
백준 - 1012번  (0) 2021.03.15
백준 - 7785번  (0) 2021.03.15
백준 - 6603번  (0) 2021.03.15