1 ๋ถ„ ์†Œ์š”

๐Ÿ“ [G5_15686] ์น˜ํ‚จ ๋ฐฐ๋‹ฌ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Main {
    static class Dot{
        int x;
        int y;

        public Dot(int x, int y) {
            this.x = x;
            this.y = y;
        }
    }

    static int N,M;
    static int[][] map;
    static ArrayList<Dot> mList;
    static ArrayList<Dot> cList;
    static int min = Integer.MAX_VALUE;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine()," ");

        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());

        map = new int[N][N];
        cList = new ArrayList<>();
        mList = new ArrayList<>();

        for(int i=0; i<N; i++){
            st = new StringTokenizer(br.readLine()," ");
            for(int j=0; j<N; j++){
                map[i][j] = Integer.parseInt(st.nextToken());
                // ์น˜ํ‚จ์ง‘์ธ ๊ฒฝ์šฐ ๋ฆฌ์ŠคํŠธ์— ๋‹ด๊ธฐ
                if(map[i][j] == 2) cList.add(new Dot(j,i));
            }
        }
        
        // ์กฐํ•ฉ
        Comb(0,0);
        System.out.println(min);

    }
    
    // ์กฐํ•ฉ
    static void Comb(int idx, int start){
        // ๊ธฐ์ €์กฐ๊ฑด
        if(idx == M){
            // ์ตœ์†Œ ๋„์‹œ ์น˜ํ‚จ ๊ฑฐ๋ฆฌ ๊ตฌํ•˜๊ธฐ
            min = Math.min(chLength(), min);
            return;
        }
        
        for(int i=start; i<cList.size(); i++){
            // M๊ฐœ ์„ ํƒ๋œ ๋ฆฌ์ŠคํŠธ์— ์ขŒํ‘œ ์ถ”๊ฐ€ํ•˜๊ธฐ
            mList.add(cList.get(i));
            Comb(idx+1, i+1);
            // ๊ธฐ์ €์กฐ๊ฑด
            mList.remove(mList.size()-1);
        }
    }
    
    // ์ตœ์†Œ ๋„์‹œ ์น˜ํ‚จ ๊ฑฐ๋ฆฌ ๊ตฌํ•˜๊ธฐ
    static int chLength(){
        // ๋„์‹œ ์น˜ํ‚จ ๊ฑฐ๋ฆฌ
        int sum = 0;

        // ์ „์ฒด ๋Œ๋ฉด์„œ 1์ผ ๋•Œ ๊ณ„์‚ฐํ•ด์ฃผ๊ธฐ
        for(int i=0; i<N; i++){
            for(int j=0; j<N; j++){
                // ๋งŒ์•ฝ ์ง‘์ธ ๊ฒฝ์šฐ
                if(map[i][j] == 1){
                    // ๊ฐ€์žฅ ์งง์€ ์น˜ํ‚จ ๊ฑฐ๋ฆฌ
                    int chickenLength = Integer.MAX_VALUE;
                    // M ๋งŒํผ ๋Œ๋ฉด์„œ ๊ธธ์ด ์ฒดํฌ
                    for(int z=0;z<mList.size();z++){
                        // ์น˜ํ‚จ์ง‘ ์ขŒํ‘œ
                        int x = mList.get(z).x;
                        int y = mList.get(z).y;

                        // ์ขŒํ‘œ ๊ณ„์‚ฐ
                        int length = Math.abs(x-j)+ Math.abs(y-i);
                        // ์ตœ์†Ÿ๊ฐ’ ๊ตฌํ•˜๊ธฐ
                        chickenLength = Math.min(chickenLength, length);
                    }
                    // ๊ฐ€์žฅ ์งง์€ ์น˜ํ‚จ ๊ฑฐ๋ฆฌ ๋”ํ•˜๊ธฐ
                    sum += chickenLength;
                }
            }
        }
        return sum;
    }
}

๐Ÿค” ๋‚˜์˜ ์ƒ๊ฐ

๊ตฌํ˜„ ๋ฌธ์ œ์ด๋‹ค.
์ด ๋ฌธ์ œ์˜ ํฌ์ธํŠธ๋Š” ์กฐํ•ฉ์œผ๋กœ M๊ฐœ์˜ ์น˜ํ‚จ์ง‘์„ ์ •ํ•˜๊ณ  ๊ฐ ์ง‘์—์„œ๋ถ€ํ„ฐ M๊ฐœ์˜ ์น˜ํ‚จ์ง‘๊นŒ์ง€์˜ ์น˜ํ‚จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•œ ๋’ค ๋„์‹œ์˜ ์น˜ํ‚จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ตœ๋Œ€ M๊ฐœ์˜ ์น˜ํ‚จ์ง‘์ด๋ผ์„œ 1๋ถ€ํ„ฐ M๊ฐœ ๋‹ค ๊ตฌํ•ด์•ผํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ฐฉ๊ฐํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์–ด์ฐจํ”ผ ์น˜ํ‚จ์ง‘์ด ๋งŽ์œผ๋ฉด ๋งŽ์„ ์ˆ˜๋ก ๋„์‹œ์˜ ์น˜ํ‚จ๊ฑฐ๋ฆฌ๋Š” ๋” ์งง์•„์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด์กฐ๊ฑด M๊ฐœ์˜ ์น˜๊ธด์ง‘์˜ ์น˜ํ‚จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š”๊ฒŒ ๋ฒ ์ŠคํŠธ๋‹ค.
์˜ค๋žœ๋งŒ์— ์กฐํ•ฉ์„ ์ด์šฉํ•˜๋Š”๊ฑฐ๋ผ ์ข€ ํ—ค๋งธ์ง€๋งŒ โ€ฆ ์ˆœ์„œ๋Œ€๋กœ ํ•ด๊ฒฐํ•ด ๋‚˜๊ฐ€๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

ํƒœ๊ทธ: , , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: