ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 14502 java
    코딩테스트 준비 2022. 10. 12. 17:26

    최대의 공간을 확보하기 위해 벽이 3개를 설치 => 모든 경우를 DFS()로 탐색 ,벽 3개 설치

    DFS를 통해 벽 3개 설치되면 바이러스부분에서 BFS를 한다

    큐를 통해 바이러스 위치를 저장하고 바이러스에서 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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    import java.util.*;
    import java.io.*;
     
    public class Main {
        
        static final int dx[] = {0,0,1,-1};
        static final int dy[] = {1,-1,0,0};
        static int n,m;
        static int map[][];
        static int maxValue = -1;
        
     
        public static void main(String[] args) throws Exception {
            
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer st = null;
            st = new StringTokenizer(br.readLine());
            n = Integer.parseInt(st.nextToken());
            m = Integer.parseInt(st.nextToken());
            map = new int[n][m];
            for(int i = 0; i<n; i++) {
                st = new StringTokenizer(br.readLine());
                for(int j =0; j<m; j++) {
                    map[i][j] = Integer.parseInt(st.nextToken());
                }
            }
     
            dfs(0);
            System.out.print(maxValue);
            
            
            
        }
        
        static void dfs(int count) {
            if(count == 3) {
                bfs();
                return;
            }
            for(int i=0; i<n; i++) {
                for(int j = 0; j<m; j++) {
                    if(map[i][j] == 0) {
                        map[i][j] = 1;
                        dfs(count+1);
                        map[i][j] = 0;
                    }
                }
            }
        }
        
        static void bfs() {
            Queue<Node> q = new LinkedList<>();
            for(int i = 0; i<n; i++) {
                for(int j = 0; j<m; j++) {
                    if(map[i][j] == 2) {
                        q.add(new Node(i,j));
                    }
                }
            }
            int copyMap[][] = new int[n][m];
            for(int i =0; i<n; i++) {
                copyMap[i] = map[i].clone();
            }
            while(!q.isEmpty()) {
                Node now = q.poll();
                int x = now.x;
                int y = now.y;
                
                for(int k=0; k<4; k++) {
                    int nx = x +dx[k];
                    int ny = y + dy[k];
                    
                    if(nx >=0 && nx <&& ny >=0 && ny <m) {
                        if(copyMap[nx][ny] == 0) {
                            q.add(new Node(nx, ny));
                            copyMap[nx][ny] = 2;
                        }
                    }
                }
            }
            zone(copyMap);
        }
        
        static void zone(int[][] copyMap) {
            int safe  =0;
            for(int i=0; i<n; i++) {
                for(int j = 0; j<m; j++) {
                    if(copyMap[i][j] == 0) {
                        safe++;
                    }
                }
            }
            if(maxValue < safe) {
                maxValue = safe;
            }
        }
        
        static class Node{
            int x;
            int y;
            Node(int x, int y){
                this.x = x;
                this.y = y;
            }
        }
     
    }
     
    cs

     

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

     

    14502번: 연구소

    인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크

    www.acmicpc.net

     

    '코딩테스트 준비' 카테고리의 다른 글

    자료구조- 스택 .java  (0) 2022.10.17
    1157 java  (0) 2022.10.12
    sort()와 compare  (0) 2022.08.11
    현대 모비스 알고리즘 경진대회 예선  (1) 2022.07.01
    백준 2629 c++  (0) 2022.06.30
Designed by Tistory.