백준 5568번 카드 놓기 문제풀이(C++)

YooHeeJoon·2022년 10월 15일
0

백준 문제풀이

목록 보기
30/56

백준 5568번 카드 놓기

아이디어

  • k개를 선택해서 만들 수 있는 정수의 개수
  • n과 m에서 썼던 알고리즘 그대로 적용

    카드를 나열하면서 만드는 정수 map의 key로 사용 => 더하기 쉽게 string으로 사용

    map의 size는 == 카드 나열하면서 만들어진 정수의 개수

    문제풀이

    #include<bits/stdc++.h>
    using namespace std;
    int n, m;
    bool visited[11];
    string str[11];
    map<string, int> _map;
    void make_num(int idx, string s) {
    	if (idx == m) {
    		_map[s] = 1;
    		return;
    	}
    	for (int i = 0; i < n; i++) {
    		if (!visited[i]) {
    			visited[i] = true;
    			make_num(idx + 1, s + str[i]);
    			visited[i] = false;
    		}
    	}
    
    }
    int main() {
    	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
    	cin >> n >> m;
    	for (int i = 0; i < n; i++) {
    		cin >> str[i];
    	}
    	make_num(0, "");
    	cout << _map.size() << '\n';
    	return 0;
    }

    0개의 댓글