반응형
[광고 누르면 오늘의 행운 상승!!]
https://www.acmicpc.net/problem/10026
굉장히 굉장히 쉬운 DFS or BFS 문제
1. 정상일 때 ) DFS를 돌면서 같은 색깔이면 visit배열을 갱신시면서 normal을 증가시킨다.
2. map을 돌면서 G를 B로 (혹은 B를 G로) 변경시킨다
3. 비정상일 때) 1번을 재실행하면서 abnormal을 증가시킨다
4. 출력한다.
package Study5;
import java.io.*;
import java.util.*;
public class 적록색약 {
static int[] dx = {-1,0,1,0};
static int[] dy = {0,1,0,-1};
static char[][] map;
static boolean[][] visit;
static int N,normal,abnormal;
public static void main(String[] args) throws Exception {
System.setIn(new FileInputStream("test.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
map = new char[N][N];
visit = new boolean[N][N];
for (int i = 0; i < N; i++) {
char ch[] = br.readLine().toCharArray();
for (int j = 0; j < N; j++) {
map[i][j] = ch[j];
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if(!visit[i][j]) {
normal++;
dfs(i,j,map[i][j]);
}
}
}
visit = new boolean[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if(map[i][j] == 'R') map[i][j] = 'G';
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if(!visit[i][j]) {
abnormal++;
dfs(i,j,map[i][j]);
}
}
}
System.out.println(normal + " " + abnormal);
}
private static void dfs(int row, int col,char curColor) {
visit[row][col] = true;
for (int i = 0; i < 4; i++) {
int nx = row + dx[i];
int ny = col + dy[i];
if(nx < 0 || nx >= N || ny < 0 || ny >= N) continue;
if(visit[nx][ny]) continue;
if(map[nx][ny] == curColor) {
dfs(nx,ny,curColor);
}
}
}
}
반응형
'2. 알고리즘사이트 > 1. 백준' 카테고리의 다른 글
도시분할계획 [백준 1647][JAVA][골드 4][프림][크루스칼][MST] (0) | 2020.04.27 |
---|---|
말이 되고픈 원숭이 [백준 1600][JAVA][골드 5][BFS] (0) | 2020.04.27 |
직사각형 탈출 [백준 16973][JAVA][골드 5][BFS] (0) | 2020.04.17 |
플로이드 [백준 11404][JAVA][골드 4][플로이드 와샬][floydWarshall] (0) | 2020.04.11 |
최소 스패닝 트리 [백준 1197][JAVA][골드 4][Prim][Kruskal][MST] (1) | 2020.04.11 |