공부공간

BOJ - 1002 ) 적록색약 JAVA 본문

알고리즘/완전탐색(BFS,DFS)

BOJ - 1002 ) 적록색약 JAVA

개발자가될수있을까? 2020. 1. 20. 23:39


https://www.acmicpc.net/problem/10026

 

10026번: 적록색약

문제 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록), B(파랑) 중 하나를 색칠한 그림이 있다. 그림은 몇 개의 구역으로 나뉘어져 있는데, 구역은 같은 색으로 이루어져 있다. 또, 같은 색상이 상하좌우로 인접해 있는 경우에 두 글자는 같은 구역에 속한다. (색상의 차이를 거의 느끼지 못하는 경우도 같은

www.acmicpc.net


어쩌다 보니 JAVA로 풀게되었다.

BFS로 한번돌고 맵을 바꾸고 한번돌면 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import java.util.Scanner;
 
class coordi {
    int x;
    int y;
    public coordi(int x, int y){
        this.x = x;
        this.y = y;
        
    }
}
public class Main {
    static int dx[] = {0,0,1,-1};
    static int dy[] = {1,-1,0,0};
    static char map[][];
    static boolean visit[][];
    static int size;
    
    public static int BFS() {
        Queue<coordi> Q = new LinkedList<coordi>();
        int cnt =0;
        for(int y = 0 ; y < size ; y ++) {
            for(int x = 0; x < size ; x++) {
                if(!visit[y][x]) {
                    cnt +=1;
                    Q.addnew coordi(x,y));
                    visit[y][x]= true;
                    while(!Q.isEmpty()) {
                        
                        coordi now = Q.poll();
                        for(int index =0 ; index < 4 ; index ++) {
                            
                            int nx = now.x + dx[index];
                            int ny = now.y + dy[index];
                            
                            if(nx >=0 && ny >= 0 && nx <size && ny <size) {
                                if(!visit[ny][nx] && map[ny][nx] == map[now.y][now.x]) {
                                    visit[ny][nx] = true;
                                    Q.add(new coordi(nx,ny));
                                }
                            }
                            
                        }
                    }
                }
            }
        }
        return cnt;
    }
    
    
    public static void main(String[] args) throws Exception{
        Scanner sc = new Scanner(System.in);
        size = sc.nextInt();
        map = new char[size][size];
        visit= new boolean[size][size];
        for(int i=0; i<size; i++) {
            char[] str = sc.next().toCharArray();
            for(int j=0; j<str.length; j++) {
                map[i][j] = str[j];
            }
        }
        System.out.print(BFS());
        
        for(int y = 0 ; y < size ; y ++) {
            for(int x =0; x < size ; x ++) {
                if(map[y][x]== 'R') {
                    map[y][x] = 'G';
                }
                visit[y][x] = false;
            }
        }
        
        System.out.println(" " + BFS());
        
    }
    
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

'알고리즘 > 완전탐색(BFS,DFS)' 카테고리의 다른 글

BOJ - 6603 ) 로또 JAVA  (0) 2020.01.23
BOJ - 7569 ) 토마토  (0) 2020.01.22
BOJ -1697 ) 숨바꼭질  (0) 2020.01.19
BOJ - 7576 ) 토마토  (0) 2020.01.19
BOJ - 5427 ) 불  (0) 2020.01.17
Comments