๐Ÿ’ป

[๋ฐฑ์ค€] ๋ธŒ๋ฃจํŠธํฌ์Šค - 14889. ์Šคํƒ€ํŠธ์™€ ๋งํฌ ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฌธ์ œํ’€์ด Baekjoon

[๋ฐฑ์ค€] ๋ธŒ๋ฃจํŠธํฌ์Šค - 14889. ์Šคํƒ€ํŠธ์™€ ๋งํฌ

๋˜ํšจ๋‹ˆ 2020. 4. 19. 17:34

๋ฌธ์ œ

์˜ค๋Š˜์€ ์Šคํƒ€ํŠธ๋งํฌ์— ๋‹ค๋‹ˆ๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋ชจ์—ฌ์„œ ์ถ•๊ตฌ๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ์ถ•๊ตฌ๋Š” ํ‰์ผ ์˜คํ›„์— ํ•˜๊ณ  ์˜๋ฌด ์ฐธ์„๋„ ์•„๋‹ˆ๋‹ค. ์ถ•๊ตฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ์ธ ์‚ฌ๋žŒ์€ ์ด N๋ช…์ด๊ณ  ์‹ ๊ธฐํ•˜๊ฒŒ๋„ N์€ ์ง์ˆ˜์ด๋‹ค. ์ด์ œ N/2๋ช…์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์Šคํƒ€ํŠธ ํŒ€๊ณผ ๋งํฌ ํŒ€์œผ๋กœ ์‚ฌ๋žŒ๋“ค์„ ๋‚˜๋ˆ ์•ผ ํ•œ๋‹ค.

BOJ๋ฅผ ์šด์˜ํ•˜๋Š” ํšŒ์‚ฌ ๋‹ต๊ฒŒ ์‚ฌ๋žŒ์—๊ฒŒ ๋ฒˆํ˜ธ๋ฅผ 1๋ถ€ํ„ฐ N๊นŒ์ง€๋กœ ๋ฐฐ์ •ํ–ˆ๊ณ , ์•„๋ž˜์™€ ๊ฐ™์€ ๋Šฅ๋ ฅ์น˜๋ฅผ ์กฐ์‚ฌํ–ˆ๋‹ค. ๋Šฅ๋ ฅ์น˜ Sij๋Š” i๋ฒˆ ์‚ฌ๋žŒ๊ณผ j๋ฒˆ ์‚ฌ๋žŒ์ด ๊ฐ™์€ ํŒ€์— ์†ํ–ˆ์„ ๋•Œ, ํŒ€์— ๋”ํ•ด์ง€๋Š” ๋Šฅ๋ ฅ์น˜์ด๋‹ค. ํŒ€์˜ ๋Šฅ๋ ฅ์น˜๋Š” ํŒ€์— ์†ํ•œ ๋ชจ๋“  ์Œ์˜ ๋Šฅ๋ ฅ์น˜ Sij์˜ ํ•ฉ์ด๋‹ค. Sij๋Š” Sji์™€ ๋‹ค๋ฅผ ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, i๋ฒˆ ์‚ฌ๋žŒ๊ณผ j๋ฒˆ ์‚ฌ๋žŒ์ด ๊ฐ™์€ ํŒ€์— ์†ํ–ˆ์„ ๋•Œ, ํŒ€์— ๋”ํ•ด์ง€๋Š” ๋Šฅ๋ ฅ์น˜๋Š” Sij์™€ Sji์ด๋‹ค.

N=4์ด๊ณ , S๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ์‚ดํŽด๋ณด์ž.

i\j12341234

  1 2 3
4   5 6
7 1   2
3 4 5  

์˜ˆ๋ฅผ ๋“ค์–ด, 1, 2๋ฒˆ์ด ์Šคํƒ€ํŠธ ํŒ€, 3, 4๋ฒˆ์ด ๋งํฌ ํŒ€์— ์†ํ•œ ๊ฒฝ์šฐ์— ๋‘ ํŒ€์˜ ๋Šฅ๋ ฅ์น˜๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • ์Šคํƒ€ํŠธ ํŒ€: S12 + S21 = 1 + 4 = 5
  • ๋งํฌ ํŒ€: S34 + S43 = 2 + 5 = 7

1, 3๋ฒˆ์ด ์Šคํƒ€ํŠธ ํŒ€, 2, 4๋ฒˆ์ด ๋งํฌ ํŒ€์— ์†ํ•˜๋ฉด, ๋‘ ํŒ€์˜ ๋Šฅ๋ ฅ์น˜๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • ์Šคํƒ€ํŠธ ํŒ€: S13 + S31 = 2 + 7 = 9
  • ๋งํฌ ํŒ€: S24 + S42 = 6 + 4 = 10

์ถ•๊ตฌ๋ฅผ ์žฌ๋ฏธ์žˆ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์Šคํƒ€ํŠธ ํŒ€์˜ ๋Šฅ๋ ฅ์น˜์™€ ๋งํฌ ํŒ€์˜ ๋Šฅ๋ ฅ์น˜์˜ ์ฐจ์ด๋ฅผ ์ตœ์†Œ๋กœ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์œ„์˜ ์˜ˆ์ œ์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” 1, 4๋ฒˆ์ด ์Šคํƒ€ํŠธ ํŒ€, 2, 3๋ฒˆ ํŒ€์ด ๋งํฌ ํŒ€์— ์†ํ•˜๋ฉด ์Šคํƒ€ํŠธ ํŒ€์˜ ๋Šฅ๋ ฅ์น˜๋Š” 6, ๋งํฌ ํŒ€์˜ ๋Šฅ๋ ฅ์น˜๋Š” 6์ด ๋˜์–ด์„œ ์ฐจ์ด๊ฐ€ 0์ด ๋˜๊ณ  ์ด ๊ฐ’์ด ์ตœ์†Œ์ด๋‹ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N(4 ≤ N ≤ 20, N์€ ์ง์ˆ˜)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— S๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ์ค„์€ N๊ฐœ์˜ ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , i๋ฒˆ ์ค„์˜ j๋ฒˆ์งธ ์ˆ˜๋Š” Sij ์ด๋‹ค. Sii๋Š” ํ•ญ์ƒ 0์ด๊ณ , ๋‚˜๋จธ์ง€ Sij๋Š” 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 100๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜์ด๋‹ค.

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์Šคํƒ€ํŠธ ํŒ€๊ณผ ๋งํฌ ํŒ€์˜ ๋Šฅ๋ ฅ์น˜์˜ ์ฐจ์ด์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ1

4
0 1 2 3
4 0 5 6
7 1 0 2
3 4 5 0

 

์˜ˆ์ œ ์ถœ๋ ฅ1

0

 

์˜ˆ์ œ ์ž…๋ ฅ2

6
0 1 2 3 4 5
1 0 2 3 4 5
1 2 0 3 4 5
1 2 3 0 4 5
1 2 3 4 0 5
1 2 3 4 5 0

 

์˜ˆ์ œ ์ถœ๋ ฅ2

2

 

์ƒ๊ฐ

 

์ดํ•ด :

- Sij = i๋ฒˆ ์‚ฌ๋žŒ๊ณผ j๋ฒˆ ์‚ฌ๋žŒ์ด ๊ฐ™์€ ํŒ€์— ์†ํ–ˆ์„ ๋•Œ, ํŒ€์— ๋”ํ•ด์ง€๋Š” ๋Šฅ๋ ฅ์น˜

- ํŒ€์˜ ๋Šฅ๋ ฅ์น˜ = ํŒ€์— ์†ํ•œ ์Œ์˜ ๋Šฅ๋ ฅ์น˜ Sij์˜ ํ•ฉ

 

๋ชฉํ‘œ : ์Šคํƒ€ํŠธ ํŒ€์˜ ๋Šฅ๋ ฅ์น˜์™€ ๋งํฌ ํŒ€์˜ ๋Šฅ๋ ฅ์น˜์˜ ์ฐจ์ด๋ฅผ ์ตœ์†Œ๋กœ ๋งŒ๋“ค๊ธฐ

 

๋ฐฉ๋ฒ• : (i, j) ์Œ์„ ๊ตฌํ•˜๊ณ  ๊ทธ ๋•Œ์˜ ํŒ€๋ณ„ ๋Šฅ๋ ฅ์น˜ ํ•ฉ์„ ๊ตฌํ•œ๋‹ค. 

1. ์Šคํƒ€ํŠธ ํŒ€๊ณผ, ๋งํฌ ํŒ€์œผ๋กœ ๋‚˜๋ˆ„๊ณ 

2. ๋Šฅ๋ ฅ์น˜ ํ•ฉ ๊ตฌํ•˜๊ธฐ

3. ๋Šฅ๋ ฅ์น˜ ์ฐจ์ด ์ตœ์†Œ๊ฐ’ ๋น„๊ตํ•˜๊ธฐ

 

์ž‘์„ฑํ•œ ์ฝ”๋“œ

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
#include <iostream>
#include <algorithm>
#include <vector>
 
using namespace std;
 
// 1. ๋‘ ํŒ€์„ ๋‚˜๋ˆˆ๋‹ค.
// 2. ํŒ€์˜ ๋Šฅ๋ ฅ์น˜์˜ ํ•ฉ์„ ๊ตฌํ•œ๋‹ค. 
// 3. ๋‘ ํŒ€์˜ ๋Šฅ๋ ฅ์น˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•œ๋‹ค.
 
int main(int argc, const char *argv[])
{
    // insert code here...
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    int n;
    cin >> n;
 
    int s[n][n];
    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            cin >> s[i][j];
        }
    }
 
    vector<int> b(n); // ํŒ€์„ ๋‚˜๋ˆŒ ๋•Œ ์ˆœ์—ด์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฐ์—ด
    for(int i=0; i<n/2; i++){
        b[i] = 1;
    }
 
    sort(b.begin(), b.end());
    int ans = 1000000000;
    do{
        // 1.
        vector<int> start, link;
        for(int i=0; i<n; i++){
            if(b[i] == 0){
                start.push_back(i); // ์Šคํƒ€ํŠธํŒ€ ๋ฒˆํ˜ธ
            }else{
                link.push_back(i); // ๋งํฌํŒ€ ๋ฒˆํ˜ธ
            }
        }
 
        // 2.
        int one = 0;
        int two = 0;
        for(int i=0; i<n/2; i++){
            for(int j=0; j<n/2; j++){
                if(i == j) continue;
                one += s[start[i]][start[j]];
                two += s[link[i]][link[j]];
            }
        }
        
        // 3.
        int cha = one - two;
        if(cha < 0){
            cha = -cha;
        }
        if(ans > cha){
            ans = cha;
        }
    }while(next_permutation(b.begin(), b.end()));
 
    cout << ans << '\n';
    return 0;
}
Colored by Color Scripter
๋ฐ˜์‘ํ˜•
Comments