Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
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
Tags
more
Archives
Today
Total
관리 메뉴

Be Coder

불량사용자 본문

알고리즘

불량사용자

ForzaCoding 2020. 4. 30. 15:04

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

#include <string>

#include <vector>

#include <set>

#include <algorithm>

using namespace std;

 

bool chk[9];

int result = 0;

vector<string> v;

set<string> s;

 

bool same_chk(string banned_id, string user_id){

    for(int i = 0; i < banned_id.size(); i++){

        if(banned_id.at(i) == '*') user_id.at(i) = '*';

    }

    if(user_id == banned_id) return 1;

    else return 0;

}

 

void dfs(vector<string> user_id, vector<string> banned_id, int cnt) {

    if(cnt == banned_id.size()){

        vector<string> tmp;

        tmp = v;

        string str = "";

        sort(tmp.begin(), tmp.end());

        

        for(int i = 0; i < v.size(); i++) str += "|" + tmp[i];

        

        if(s.count(str) == 0) {

            result++;

            s.insert(str);

        }

        return;

    }

    

    for(int i = 0; i < user_id.size(); i++){

        if(chk[i] == false && banned_id[cnt].size() == user_id[i].size() && same_chk(banned_id[cnt], user_id[i])){

            chk[i] = true;

            v.push_back(user_id[i]);

            dfs(user_id, banned_id, cnt + 1);

            v.pop_back();

            chk[i] = false;

        }

    }

}

 

int solution(vector<string> user_id, vector<string> banned_id) {

    int answer = 0;

    

    dfs(user_id, banned_id, 0);

    answer = result;

    

    return answer;

}

Colored by Color Scripter

cs

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

[프로그래머스] 다트게임  (0) 2020.05.14
[프로그래머스] 징검다리 건너기  (0) 2020.05.05
[프로그래머스] 호텔 방 배정  (0) 2020.05.05
튜플  (3) 2020.04.30
수학 - 나머지 연산, GCD, LCM, 진법, 소수  (0) 2020.04.16