하루에 한 문제
[BOJ-10026][그래프이론] 적록색약 -Java 본문
https://www.acmicpc.net/problem/10026
package algo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
public class boj_10226_적록색약 {
static char map[][];
static int N;
static boolean visited[][][];
static int dx[]= {0,0,-1,1};
static int dy[]= {-1,1,0,0};
public static void main(String[] args) throws IOException {
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
N=Integer.parseInt(br.readLine());
map=new char[N][N];
visited= new boolean[N][N][2];
for(int i=0; i<N; i++) {
String input=br.readLine();
for(int j=0; j<input.length(); j++) {
map[i][j]=input.charAt(j);
}
}
int blind=0;
int notBlind=0;
String blindColor="RG";
for(int i=0; i<N; i++) {
for(int j=0; j<N; j++) {
//적록색약 아닌사람
if(!visited[i][j][0]) {
bfs(i,j,String.valueOf(map[i][j]), 0);
notBlind++;
}
//적록색약인 사람
if(!visited[i][j][1]) {
if(map[i][j]=='R' || map[i][j]=='G') bfs(i,j, blindColor, 1); //R, G
else bfs(i,j,String.valueOf(map[i][j]),1); //B
blind++;
}
}
}
System.out.println(notBlind);
System.out.println(blind);
}
private static void bfs(int i, int j, String blindColor, int k) {
Queue <int []> queue = new LinkedList<>();
visited[i][j][k]=true;
queue.offer(new int[] {i,j});
while(!queue.isEmpty()) {
int []point = queue.poll();
for(int d=0; d<4; d++) {
int nx=point[0]+dx[d];
int ny=point[1]+dy[d];
if(nx<0 || ny<0 || nx>=N || ny>=N || visited[nx][ny][k] ) continue;
if(!blindColor.contains(String.valueOf(map[nx][ny]))) continue;
queue.offer(new int[] {nx,ny});
visited[nx][ny][k]=true;
}
}
}
}
소요시간 : 22분
전형적인 BFS문제입니다.
3차원 visited를 선언해 방문체크를 하였습니다.
적록색약을 처리하기 위해서 아래처럼 선언해 사용하였습니다.
적록색약을 처리할 때 현재 map[i][j]값이 R,이나 G라면 blindColor를 매개변수로 넘겨주어 contains로 확인을 하였ㅅㅂ늬다.
너무 쉬운 문제라서 딱히 설명할게 없네용
끝~
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ-1717][Union-Find] 집합의 표현 -Java (0) | 2021.04.12 |
---|---|
[BOJ-1920][이분탐색] 수 찾기 -Java (0) | 2021.04.11 |
[BOJ-10830][분할정복] 행렬 제곱 -Java (0) | 2021.04.04 |
[BOJ-2630][분할정복] 색종이 만들기 -Java (0) | 2021.04.04 |
[BOJ-3020][이분탐색] 개똥벌레 -Java (0) | 2021.04.03 |
Comments