문제:  https://www.acmicpc.net/problem/15683



시험에서는 참조값 초기화에서 버벅거려서 DFS까지 다 구현해놓고 에러를 찾다가 제시간에 제출하지 못했다 ....또륵.,.

소 잃고 외양간이라도 고쳐본다...


백준 사이트에 올린 소스코드에는 주석이 달려있으니 코드보고 이해가 안간다면 주석을 풀어가면서 실행해보면 이해가 빠를 거에요!



백준 사이트에 제출한 소스 코드 : https://www.acmicpc.net/source/8390315


 import java.util.LinkedList;
import java.util.Scanner;

public class Main {
    
    static LinkedList cctv = new LinkedList<>();
    static int min;
    static int col;
    static int row;
    static int [][] map;
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
            col = scan.nextInt();
            row = scan.nextInt();
            min = col * row;
            map = new int[col][row]; 
            boolean [][] chk_map = new boolean[col][row];
            
            for(int i = 0 ; i < col ; i++) {
                for(int j = 0 ; j < row; j ++) {
                    map[i][j] = scan.nextInt();
                    if(map[i][j] > 0 && map[i][j] < 6) {
                        cctv.add(new Node(map[i][j],i,j));
                    }
                    if(map[i][j] ==6){
                        chk_map[i][j] = true;
                    }
                }
            }
            search(0,chk_map);
            System.out.println(min);
        scan.close();
    }
    
    public static void search(int start, boolean[][] arr) {
        
        boolean[][] resArr = new boolean[col][row];
       
        if (start >= cctv.size() ) {
            int count = count(arr);
            if(min > count) {
                min = count;
            }
            return ;
        }
        
        Node n = cctv.get(start);
        
        switch (n.value) {
        case 1: 
//            System.out.println("type : " + n.value);
            for(int i =  0; i < 4; i++) {

                for(int z = 0 ; z < col ; z++) {
                    for( int j = 0 ; j = 0 ; i--) {
                if(map[i][node.row] == 6) {
                    break;
                }
                    arr[i][node.row] = true;
            }
            
            break;
        case 1 : 
//            System.out.println("하");
            for(int i = node.col ; i < col ; i++) {
                if(map[i][node.row] == 6) {
                    break;
                }
                    arr[i][node.row] = true;
            }

            break;
        case 2 : 
//            System.out.println("좌");
            for(int i = node.row ; i >= 0 ; i--) {
                if(map[node.col][i] == 6) {
                    break;
                }
                    arr[node.col][i] = true;
            }
            break;
            
        case 3 : 
//            System.out.println("우");
            for(int i = node.row ; i < row; i++) {
                if(map[node.col][i] == 6) {
                    break;
                }
                    arr[node.col][i] = true;
            }
            
            break;
        }
        return arr;
    }
    
    static class Node {
        int value;
        int col;
        int row;
        public Node(int v, int c, int r) {
            value = v ;
            col = c;
            row = r;
        }
    }
}

+ Recent posts

"여기"를 클릭하면 광고 제거.