문제 설명
풀이
역시나 결국 같은 유형의 병사들의 숫자를 구해서 제곱을 해서 각각 따로 더해주면 된다 간단한 BFS문제
코드
import java.util.*;
import java.io.*;
class Main {
static int N,M;
static int c =0;
static Character[][] map;
static int[][] visit;
static int[] dx = {1, -1, 0, 0};
static int[] dy = {0, 0, 1, -1};
static Queue<int[]> que = new LinkedList<>();
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
M = sc.nextInt();
N = sc.nextInt();
map = new Character[N][M];
visit = new int[N][M];
int me = 0;
int you = 0;
sc.nextLine();
for (int i = 0; i < N; i++) {
String str = sc.nextLine();
for (int j = 0; j < M; j++) {
map[i][j] = str.charAt(j);
}
}
for(int i=0; i<N; i++){
for(int j=0; j<M; j++){
if (visit[i][j] != 1){
c=1;
que.add(new int[] {i,j});
visit[i][j] = 1;
bfs();
if(map[i][j]=='W')
me += c*c;
else
you += c*c;
}
}
}
System.out.println(me + " " + you);
}
static void bfs() {
// bfs 시작
while(!que.isEmpty()) {
int[] out = que.poll();
int x = out[0];
int y = out[1];
for(int i=0; i<4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if(0 > nx || nx >= N || 0 > ny || ny >= M || visit[nx][ny] == 1) {
continue;
}
if (map[nx][ny] != map[x][y])
continue;
c++;
visit[nx][ny] = 1;
que.add(new int[] {nx, ny});
}
}
}
}
https://www.acmicpc.net/problem/1303
'개발합시다. > JAVA 알고리즘 문제풀이' 카테고리의 다른 글
BOJ_12851 숨바꼭질 2 [Java] (G5) (0) | 2021.11.24 |
---|---|
BOJ_17142 연구소 3 [Java] (G4) (0) | 2021.11.22 |
BOJ_1743 음식물 쓰레기[Java] (S1) (0) | 2021.11.18 |
BOJ_7576 토마토 [Java] (S1) (0) | 2021.11.16 |
BOJ_7562 나이트의 이동 [JAVA](S2) (0) | 2021.11.16 |