백준 2422 한윤정이 이탈리아에 가서 아이스크림을
본문 바로가기
알고리즘 모음집/알고리즘 (Algorithm)

백준 2422 한윤정이 이탈리아에 가서 아이스크림을

by KyeongMin 2019. 10. 7.
728x90
반응형

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

 

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

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

www.acmicpc.net

 

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
#define NSIZE 201
#define MSIZE 10000
#include<stdio.h>
#include<iostream>
#include<vector>
using namespace std;
int N, M;
vector<int>num;
int chkNUM[NSIZE][NSIZE];
void init() {
    cin >> N >> M;
    for (int i = 0; i < M; i++) {
        int a, b;
        cin >> a >> b;
        chkNUM[a][b] = chkNUM[b][a] = 1;
    }
}
bool chk(int num1) {
    for (int i = 0; i < num.size(); i++) {
        if (chkNUM[num[i]][num1] == 1 ||
            chkNUM[num1][num[i]] == 1)return false;
    }
    return true;
}
int ret = 0;
 
void dfs1(int cnt) {
    if (num.size() == 3) {
        ret++;
        return;
    }
    for (int i = cnt; i <= N; i++) {
        if (chk(i)) {
            num.push_back(i);
            dfs1(i + 1);
            num.pop_back();
        }
 
    }
}
int main(void) {
    init();
    dfs1(1);
    cout << ret << endl;
    return 0;
}
 
 

정말 단순한조합을 뽑아낼수 있는지와 약간의 조합을 하면 안되는 번호를 어떻게 거를것인지 포인트 같습니다.

위의 설명을 코드로 옮긴것입니다.

 

그래프 같이 저장하는것은

 

이렇게 하시면됩니다. 정말 간단하지 않나요? 이문제는 조합을 만드는것은 여러가지 방법이있지만 그것에서 시간초과가 안생기므로 chk해주는 함수를 잘 짜도록 해봅시다. 여기서 저도 실수 했거든요.

 

728x90
반응형

'알고리즘 모음집 > 알고리즘 (Algorithm)' 카테고리의 다른 글

백준 9944 NxM 보드 완주하기  (0) 2019.10.08
백준 2234 성곽  (0) 2019.10.07
백준 1107 리모컨  (0) 2019.10.04
백준 3019 테트리스  (0) 2019.10.04
백준 3568 iSharp  (0) 2019.10.04

댓글