본문 바로가기

BOJ/C++

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

문제

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

입력

첫째 줄에 정수 N과 M이 주어진다. N은 아이스크림 종류의 수이고, M은 섞어먹으면 안 되는 조합의 개수이다. 아래 M개의 줄에는 섞어먹으면 안 되는 조합의 번호가 주어진다. 같은 조합은 두 번 이상 나오지 않는다. (1 ≤ N ≤ 200, 0 ≤ M ≤ 10,000)

 

풀이

2422 맞았습니다!! 2144 244 C++14 / 수정 1355 3분 전

 

1. 조합을 구한다. DFS를 사용 

 

2. 3개가 구해지면 check() 함수를 호출하여 조합이 되면 안되는 요소들을 걸러준다. 

 


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
#include <iostream>
#include <vector>
 
using namespace std;
 
int n, m, ans = 0;
int noComb[201][201];
 
bool visited[201];
 
bool check() {
    //구한 조합 중 조합이 되면 안되는 아이스크림 종류를 골라준다.
    int arr[3], idx = 0
    for (int i = 1; i <= n; i++) {
        if (visited[i]) {
            arr[idx++= i;
        }
    }
 
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            if (i == j) continue;
 
            if (noComb[arr[i]][arr[j]] || noComb[arr[j]][arr[i]]) return false;
        }
    }
    return true;
}
void dfs(int cur, int cnt)
{
    if (cnt == 3)
    {
        //조합을 구한다.
        if(check()) ans++;
        return;
    }
 
    for (int j = cur; j <= n; j++)
    {
        if (!visited[j]) {
            visited[j] = true;
            dfs(j+1, cnt+1);
            visited[j] = false;
        }
    }
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
 
    cin >> n >> m;
 
    for (int i = 0; i < m; i++)
    {
        int a, b;
        cin >> a >> b;
        
        noComb[a][b] = 1;
        noComb[b][a] = 1;
    }
 
    dfs(1,0);
 
    cout << ans << '\n';
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

'BOJ > C++' 카테고리의 다른 글

[BOJ] 자와 각도기  (0) 2019.10.24
[BOJ] 안전영역  (0) 2019.10.24
[BOJ] 알고스팟  (0) 2019.10.24
[BOJ] 달이 차오른다, 가자  (0) 2019.10.23
[BOJ] 다리만들기  (0) 2019.10.19