[공부용이기 때문에 코드가 깔끔하지 않을 수 있습니다!]
문제는 W와 B가 주어질 때 상하좌우로 같은 알파벳이라면 그거에 개수만큼 제곱되어 공격력이 된다.
그래서 각각의 공격력을 나타내면 된다.
문제
import java.util.Scanner;
public class Main {
static char[][] map;
static boolean[][] visit;
static int n;
static int m;
static int dx[] = {-1, 1, 0, 0};
static int dy[] = {0, 0, -1, 1};
static int ally;
static int enemy;
static int allyCount;
static int enemyCount;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
m = sc.nextInt();
n = sc.nextInt();
sc.nextLine();
map = new char[n][m];
visit = new boolean[n][m];
ally = 0;
enemy = 0;
allyCount = 0;
enemyCount = 0;
for (int i = 0; i < n; i++) {
String str = sc.nextLine();
for (int j = 0; j < str.length(); 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]) {
dfs(i, j, map[i][j]);
ally += allyCount * allyCount;
enemy += enemyCount * enemyCount;
allyCount = 0;
enemyCount = 0;
}
}
}
System.out.println(ally + " " + enemy);
}
private static void dfs(int x, int y, char t) {
visit[x][y] = true;
if (t == 'W')
allyCount++;
else
enemyCount++;
for (int i = 0; i < 4; i++) {
int nowX = x + dx[i];
int nowY = y + dy[i];
if (nowX >= 0 && nowY >= 0 && nowX < n && nowY < m) {
if (!visit[nowX][nowY] && map[nowX][nowY] == t) {
dfs(nowX, nowY, t);
}
}
}
}
}
코드는 위처럼 짰는데 원래라면 n(세로)을 입력받고 m(가로)을 입력받는데 지금 m을 받은 후 n을 받은 것을 볼 수 있다.
처음에 그렇게 짰는데 계속 틀렸길래 문제를 보니 가로가 n이었도 세로가 m이었다.
문제를 잘 읽자.
여담으로 이렇게 스태틱을 많이 써도 되나..?
'Coding Test > DFS & BFS' 카테고리의 다른 글
[DFS] 백준 - 1967번: 트리의 지름 Java 풀이 (1) | 2022.11.30 |
---|---|
[DFS] 백준 - 14716번: 현수막 Java 풀이 (0) | 2022.11.30 |
[DFS] 백준 - 3184번: 양 Java 풀이 (0) | 2022.11.30 |
[DFS/BFS] 백준 - 1926번: 그림 Java 풀이 (0) | 2022.11.29 |
[DFS] 백준 - 1595번: 북쪽나라의 도로 Java 풀이 (0) | 2022.11.29 |