백준 10026번
https://www.acmicpc.net/problem/10026
문제설명
적록색약이 아닌사람(A) 적록색약인 사람(B)과 이 봤을때의 그림의 그룹의 개수를 나누는 문제
A는 R,G,B 각각의 그룹을 나눌수 있지만 B는 R,G가 같게 보인다는 가정.
접근
BFS로 접근
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
public class Main {
static int[] dx = {-1, 0, 1, 0};
static int[] dy = {0, 1, 0, -1};
static char[][] map;
static boolean[][] visit;
static Queue<int[]> q = new LinkedList<>();
static int n;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
n = Integer.parseInt(br.readLine());
map = new char[n][n];
visit = new boolean[n][n];
for (int i = 0; i < n; i++) {
String temp = br.readLine();
for (int j = 0; j < n; j++) {
map[i][j] = temp.charAt(j);
}
}
int cnt = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (!visit[i][j]) {
cnt++;
bfs(i, j);
}
}
}
sb.append(cnt + " ");
cnt = 0;
visit = new boolean[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (!visit[i][j]) {
cnt++;
bfs(i, j);
}
}
}
sb.append(cnt);
System.out.println(sb);
}
public static void bfs(int x, int y) {
q.offer(new int[]{x, y});
visit[x][y] = true;
while (!q.isEmpty()) {
int[] t = q.poll();
int cx = t[0];
int cy = t[1];
for (int i = 0; i < 4; i++) {
int nx = cx + dx[i];
int ny = cy + dy[i];
if (nx < 0 || ny < 0 || nx >= n || ny >= n) continue;
if (visit[nx][ny] || map[cx][cy] != map[nx][ny]) continue;
visit[nx][ny] = true;
q.offer(new int[]{nx, ny});
}
if (map[cx][cy] == 'G')
map[cx][cy] = 'R';
}
}
}
이슈
문제 풀대 static으로 n선언해주고 아래에서 int n으로 지역변수 선언해서 계속 값이 25가 나와서 헤맸다..;;
(오타는 옆에서 누가 봐주는게 빠를듯...)
'알고리즘 > 백준 Baekjoon' 카테고리의 다른 글
백준 11659 구간 합 구하기 4(JAVA) - DP(Dynamic Programming) (0) | 2023.04.01 |
---|---|
백준 7562 나이트의 이동(JAVA) - BFS (0) | 2023.03.25 |
백준 1697번 숨바꼭질(JAVA) - BFS (0) | 2023.03.24 |
백준 1926번 그림(JAVA) - BFS (0) | 2023.03.22 |
(LEVEL 2)프로그래머스 - 튜플 (JAVA) [2019 카카오 개발자 겨울 인턴십] (0) | 2023.03.13 |