티스토리 뷰

알고리즘/백준

백준 1303 (전쟁 - 전투) java

김다미김태리신시아 2022. 12. 6. 01:39

문제

https://www.acmicpc.net/problem/1303

 

1303번: 전쟁 - 전투

첫째 줄에는 전쟁터의 가로 크기 N, 세로 크기 M(1 ≤ N, M ≤ 100)이 주어진다. 그 다음 두 번째 줄에서 M+1번째 줄에는 각각 (X, Y)에 있는 병사들의 옷색이 띄어쓰기 없이 주어진다. 모든 자리에는

www.acmicpc.net

코드

import java.util.*;
import java.io.*;
public class Main {
    static int n = 0;
    static int m = 0;
    static int[][] board = new int[101][101];
    static int[][] visit = new int[101][101];
    static int mforce = 0;
    static int yforse = 0;

    public static void main(String[] args) throws Exception {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(bf.readLine(), " ");
        m = Integer.parseInt(st.nextToken());
        n = Integer.parseInt(st.nextToken());

        for(int i=1;i<=n;i++)
        {
            String[] line = bf.readLine().split("");
            for(int j=1;j<=m;j++)
            {
                char cur = line[j-1].charAt(0);
                if(cur=='W')
                    board[i][j] = 1;
                else if(cur=='B')
                    board[i][j] = 2;
            }
        }
        int sum = 0;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                if(visit[i][j]==0)
                {
                    sum = bfs(i,j,board[i][j]);
                    if(board[i][j]==1)
                        mforce +=sum;
                    else
                        yforse +=sum;
                }
            }
        }

        System.out.println(mforce+" "+yforse);
        bf.close();
    }

    static int bfs(int x,int y,int who)
    {
        int[] dx= {0,0,-1,1};
        int[] dy= {1,-1,0,0};
        Queue<pair> q = new LinkedList<>();
        q.add(new pair(x,y));
        visit[x][y]=1;
        int num = 1;

        while(!q.isEmpty())
        {
            pair cur = q.poll();
            for(int i=0;i<4;i++)
            {
                int nx = cur.x+dx[i];
                int ny = cur.y+dy[i];
                if(nx>=1&&nx<=n&&ny>=1&&ny<=m) {
                    if (visit[nx][ny] == 0 && board[nx][ny] == who) {
                        visit[nx][ny] = 1;
                        num=num+1;
                        q.add(new pair(nx, ny));
                    }
                }
            }
        }
        int result = num * num;
        return result;
    }
}
class pair
{
    int x;
    int y;
    pair(int x,int y)
    {
        this.x = x;
        this.y = y;
    }
}

'알고리즘 > 백준' 카테고리의 다른 글

백준 2589 (보물섬) - java  (0) 2022.12.27
백준 2638 (치즈) - java  (1) 2022.12.27
백준 18405 (경쟁적 전염) java  (0) 2022.12.02
백준 2636 (치즈) java  (0) 2022.12.01
백준 4963 (섬의 개수) - java  (1) 2022.12.01