# 15686. ์น˜ํ‚จ ๋ฐฐ๋‹ฌ
Study Repository

15686. ์น˜ํ‚จ ๋ฐฐ๋‹ฌ

by rlaehddnd0422

 

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

 

15686๋ฒˆ: ์น˜ํ‚จ ๋ฐฐ๋‹ฌ

ํฌ๊ธฐ๊ฐ€ N×N์ธ ๋„์‹œ๊ฐ€ ์žˆ๋‹ค. ๋„์‹œ๋Š” 1×1ํฌ๊ธฐ์˜ ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค. ๋„์‹œ์˜ ๊ฐ ์นธ์€ ๋นˆ ์นธ, ์น˜ํ‚จ์ง‘, ์ง‘ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ๋„์‹œ์˜ ์นธ์€ (r, c)์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋‚ด๊ณ , rํ–‰ c์—ด ๋˜๋Š” ์œ„์—์„œ๋ถ€ํ„ฐ r๋ฒˆ์งธ ์นธ

www.acmicpc.net

 

 

Point

 

  • ๋ชจ๋“  ์น˜ํ‚จ์ง‘(2)์ค‘์— n๊ฐœ๋ฅผ ๊ณ ๋ฅธ ๋‹ค์Œ, ๊ฐ๊ฐ์˜ ์ง‘๊ณผ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
  • ๊ฐ๊ฐ ์ง‘์˜ ์น˜ํ‚จ ๊ฑฐ๋ฆฌ๋Š” ๊ฐ ์ง‘๊ณผ ์น˜ํ‚จ์ง‘๊ณผ์˜ (x์ขŒํ‘œ์ฐจ์˜ ์ ˆ๋Œ“๊ฐ’ + y์ขŒํ‘œ์ฐจ์˜ ์ ˆ๋Œ“๊ฐ’)์˜ ์ตœ์†Ÿ๊ฐ’.
  • ๋„์‹œ์˜ ์น˜ํ‚จ ๊ฑฐ๋ฆฌ๋Š” ๋ชจ๋“  ์ง‘์˜ ์น˜ํ‚จ ๊ฑฐ๋ฆฌ์˜ ํ•ฉ์ด๋‹ค.
  • ๋„์‹œ์˜ ์น˜ํ‚จ๊ฑฐ๋ฆฌ์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅ

 

Solution 

#include <iostream>
#include <vector>
#include <algorithm>
#include <utility>
#define FASTio ios_base :: sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL)
#define endl '\n' 

using namespace std;
int n,m;
int ans = -1;
vector<vector<int>> area(51,vector<int>(51,0));
vector<pair<int,int>> chicken;
vector<pair<int,int>> home;


int main()
{
    FASTio;
    cin >> n >> m;
	
    
    // 1๋ฒˆ
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            cin >> area[i][j];
            if(area[i][j]==2)
            {
                chicken.push_back(make_pair(i,j));
            }
            else if(area[i][j]==1)
            {
                home.push_back(make_pair(i,j));
            }
        }
    }
    
	// 2๋ฒˆ
    vector<int> d(chicken.size());
    for(int i=0;i<m;i++)
    {
        d[i] = 1;
    }
    for(int i=m;i<chicken.size();i++)
    {
        d[i] = 0;
    }
    sort(d.begin(),d.end());
		
    // 3๋ฒˆ
    do
    {
        int sum = 0;
        for(auto &p : home)
        {
            vector<int> dists;
            
            // 
            for(int i=0;i<chicken.size();i++)
            {
                if(d[i]==0) continue;
                
                // ์„ ํƒํ•œ ์น˜ํ‚จ์ง‘์— ๋Œ€ํ•ด์„œ๋งŒ ๊ฑฐ๋ฆฌ๊ณ„์‚ฐ
                auto &s = chicken[i];
                int d1 = abs(p.first - s.first);
                int d2 = abs(p.second - s.second);
                int dist = d1+d2;

                // ๊ณ„์‚ฐํ•œ ๊ฑฐ๋ฆฌ dists์— ํ‘ธ์‰ฌ
                dists.push_back(dist);
            }


            // ๊ณ„์‚ฐํ•œ ๊ฑฐ๋ฆฌ์ค‘ ์ตœ์†Œ๊ฐ’์„ sum์— ๋”ํ•ด์คŒ -> ๋„์‹œ์˜ ์น˜ํ‚จ ๊ฑฐ๋ฆฌ
            sum += *min_element(dists.begin(),dists.end());
        }

        if(ans==-1 || sum<ans)
        {   ans = sum;
        }

    } while(next_permutation(d.begin(),d.end()));
    
	// 4๋ฒˆ
    cout << ans;

    return 0;
}

 

 

1๋ฒˆ. ์˜์—ญ๋ฐฐ์—ด์„ ์ž…๋ ฅ๋ฐ›๊ณ  ์˜์—ญ๊ฐ’์ด 1์ด๋ฉด home์— ์ขŒํ‘œ๊ฐ’ push, 2์ด๋ฉด chicken์— ์ขŒํ‘œ๊ฐ’ push

 

2๋ฒˆ.  1) ๋ชจ๋“  ์น˜ํ‚จ์ง‘์ค‘์—์„œ m๊ฐœ๋ฅผ ๊ณ ๋ฅด๊ธฐ ์œ„ํ•ด d ๋ฐฐ์—ด ์ƒ์„ฑ

 

3๋ฒˆ.   1) 0~m-1์— 1์„ค์ • m~chicken.size()์— 0์„ ์„ค์ •ํ•˜๊ณ  ์›์†Œ๊ฐ€ 1์ธ ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋ฉด ๋จ

          2) 1)์— ๊ด€ํ•ด next_permutation ์‹คํ–‰ -> ์กฐํ•ฉ์ด ๋œ๋‹ค

          3) ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ -> ๊ฐ๊ฐ ์ง‘์— ๋Œ€ํ•œ ์น˜ํ‚จ๊ฑฐ๋ฆฌ์˜  ์ตœ์†Ÿ๊ฐ’ sum์— ๋”ํ•ด์คŒ -> sum์˜ ์ตœ์†Ÿ๊ฐ’ ans์— ์ €์žฅ

 

         

'๐Ÿ“— CS > Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

5014. ์Šคํƒ€ํŠธ๋งํฌ  (0) 2023.01.28
3187. ์–‘์น˜๊ธฐ ๊ฟ  (0) 2023.01.27
17089. ์„ธ ์นœ๊ตฌ  (0) 2023.01.24
17088. ๋“ฑ์ฐจ์ˆ˜์—ด ๋ฐ˜ํ™˜  (0) 2023.01.23
16968 / ์ฐจ๋Ÿ‰ ๋ฒˆํ˜ธํŒ 1  (0) 2023.01.20

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

Study Repository

rlaehddnd0422

ํ™œ๋™ํ•˜๊ธฐ