문제풀이(Problem Solving)

백준, BOJ, 5568번, 카드 놓기 : C++ [CPP]

게임이 더 좋아 2022. 1. 7. 16:04
반응형
728x170

어렵지 않았다.

다만 머리로 아 어떡하지? 중복제거 어떡하지??

 

set 생각날 때까지 어려웠다.

 

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

 


 

#맞은 풀이

#include <bits/stdc++.h>

using namespace std;

int n,k;

set<int> numbers;
vector<int> card;
bool check[10];


//카드를 고르면서 정수를 만듬.
void func(int cnt, string s){
    if(cnt == k){
        numbers.insert(stoi(s)); //1,3 과 13은 자리를 바꿔도 같은 정수라 중복 제거해야함.
        //set 이용
        return;
    }
    
    for(int i=0; i<n; i++){
        if(check[i] == true)continue;
        check[i] = true;
        string after = s;
        after += to_string(card[i]); //다음에 고른 수를 뒤에 추가
        func(cnt+1, after);
        check[i] = false;
    }
}


int main(){
    cin >> n >> k;
    
    for(int i=0; i<n; i++){
        int x;
        cin >> x;
        card.push_back(x);
    }
    
    func(0,"");
    
    cout << numbers.size();
    
    
    return 0;
}

 

어렵지 않았다.

728x90
반응형
그리드형