반응형

문제 출처 :


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



알고리즘 분석 :


문제 해결에 필요한 사항

1. Permutation :: http://www.crocus.co.kr/306

2. 부르트 포스


사실상 이 문제는 N의 최대가 10이기에, 10!로 모든 경우를 다따져서 해결 할 수 있다.


위의 Permutation 링크에서 순열 코드를 이용하여 그대로 쓴 후, 그 내부인 k == m에서 자신보다 앞에 몇명이 존재하는지


for문을 통해 체크해주고 한번이라도 틀리면 break로 중지하고 다른 순열을 확인하면 된다.


10!에 내부 for문까지해서 O(10*10!) = 36,288,000이기에 무난하게 통과한다.





소스 코드 : 



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
#include <iostream>
#include <cstdio>
#include <algorithm>
 
using namespace std;
 
typedef pair<intint> pii;
pii arr[51];
 
int cnt = 0;
 
void permutations(pii *a, const int k, const int m)
{
    int i;
    int temp;
 
 
    if (k == m) //순열이 완성됐을 때 한 줄로 서기 검사
    {
        bool chk = false;
        for (i = 0; i <= m; i++)
        {
            int front = 0;
            for (int j = i - 1; j >= 0; j--)
                if (a[i].first < a[j].first)
                    front++;                    
 
            if (front == a[i].second)
                chk = true;
            else
            {
                chk = false;
                break;
            }
        }
        if (chk)
        {
            for (int i = 0; i <= m; i++)
                printf("%d ", a[i].first);
            exit(0);
        }
    }
 
    else 
    {
        for (i = k; i <= m; i++)
        {
            swap(a[k], a[i]); 
            permutations(a, k + 1, m);                                       
            swap(a[k], a[i]);
        }
 
    }
}
 
int main()
{
    int n;
    scanf("%d"&n);
 
    for (int i = 0; i < n; i++)
    {
        int val;
        scanf("%d"&val);
        arr[i] = { i + 1, val };
    }
 
    permutations(arr, 0, n - 1); // 0~n-1 까지의 수는 총 n가지이다. 
}
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus


반응형

'Applied > 알고리즘 문제풀이' 카테고리의 다른 글

[10827번] a^b  (0) 2017.04.21
[2589번] 보물섬  (0) 2017.04.21
[13711번] LCS 4  (0) 2017.04.20
[1958번] LCS 3  (0) 2017.04.19
[9252번] LCS 2  (0) 2017.04.19