SDJ( 수돈재 아님 ㅎ )

[C++] 2422 - 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 본문

알고리즘/Backjoon

[C++] 2422 - 한윤정이 이탈리아에 가서 아이스크림을 사먹는데

ShinDongJun 2020. 1. 23. 12:54

문제 링크 : https://www.acmicpc.net/problem/2422

 

2422번: 한윤정이 이탈리아에 가서 아이스크림을 사먹는데

문제 한윤정과 친구들은 이탈리아로 방학 여행을 갔다. 이탈리아는 덥다. 윤정이와 친구들은 아이스크림을 사먹기로 했다. 아이스크림 가게에는 N종류의 아이스크림이 있다. 모든 아이스크림은 1부터 N까지 번호가 매겨져있다. 어떤 종류의 아이스크림을 함께먹으면, 맛이 아주 형편없어진다. 따라서 윤정이는 이러한 경우를 피하면서 아이스크림을 3가지 선택하려고 한다. 이때, 선택하는 방법이 몇 가지인지 구하려고 한다. 입력 첫째 줄에 정수 N과 M이 주어진다. N은

www.acmicpc.net

 

먼저 V배열에 먹으면 안되는 조합 ( 1, 2 )를 1로 체크해두고 ( 탐색시 그 경우는 제외 시킨다 )

백트래킹으로 배열에 아이스크림을 하나씩 담으면서 넣는 아이스크림이 이전에 넣은 아이스크림과 같이 먹어도 되는 조합인지 검사하고 넣는다.

이 때 오름차순을 안하고 넣으면 똑같은 조합이 여러가지로 나올 수 있으므로

ex) (1, 2, 5) (1, 5, 2) (5, 1, 2) 등... 같은 조합

무조건 왼쪽에서 오른쪽으로 갈 때는 오름차순을 지키도록 해서 경우의 수를 구했다.

 

 

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
#include<bits/stdc++.h>
 
#define endl '\n'
 
using namespace std;
 
int N, M;
int cnt;
 
bool isuse[205];
bool V[205][205];
int arr[205];
 
int check(int l, int k)
{
    for(int i = 0; i < k; ++i)
    {
        if(V[arr[i]][l])
            return 0;
    }
 
    return 1;
}
 
void B(int k)
{
    if(k == 3)
    {
        cnt++;
        return;
    }
 
    for(int i = 1; i <= N; ++i)
    {
        if(isuse[i] == 0 && check(i, k) && arr[k-1< i)
        {
            isuse[i] = 1;
            arr[k] = i;
            B(k+1);
            arr[k] = 0;
            isuse[i] = 0;
        }
    }
}
 
int main(void)
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
 
    cin >> N >> M;
    int v1, v2;
 
    for(int i = 0; i < M; ++i)
    {
        cin >> v1 >> v2;
        V[v1][v2] = V[v2][v1] = 1;
    }
 
    B(0);
 
    cout << cnt << endl;
 
    return 0;
}

'알고리즘 > Backjoon' 카테고리의 다른 글

[C++] 10750 - Censoring  (0) 2020.01.23
[C++] 2468 - 안전 영역  (0) 2020.01.23
[C++] 9019 - DSLR  (0) 2020.01.23
[C++] 1780 - 종이의 개수  (0) 2020.01.23
[C++] 1158 - 요세푸스 문제  (0) 2020.01.23
Comments