[백준 / c++] 9742. 순열

soobee·2024년 1월 10일

문제 ⭐️

바로가기 > https://www.acmicpc.net/problem/9742

코드 💻

#include <algorithm>
using namespace std;

int fact[12] = { 1, };

int main() {
    // 순열의 개수를 파악하기 위해
    for (int i=1; i<= 10; i++)
        fact[i] = fact[i-1]*i;
    
    string a; // 집합
    int n; // n번째 수

    while(cin >> a >> n) {
        cout << a << " " << n << " = ";
        
        // 해당하는 순열이 없는 경우: n보다 순열의 개수가 더 작을 경우
        if(n > fact[a.length()]){
            cout << "No permutation" << endl;
            continue;
        }
        
        int cnt = 0;
        do {
            cnt++;
            
            if (cnt == n){
                cout << a << endl;
                break;
            }
        // next_permutation: a를 다음 순열로 바꿈
        } while(next_permutation(a.begin(), a.end()));
    }
    return 0;
}

풀이 ✏️

  • 순열의 개수를 파악하기 위해 fact배열을 만들고 index수가 주어질 때의 순열의 수를 저장한다.
  • next_permutation 함수를 처음 알게 됐다.
    - 다음 순열이 있으면 해당 변수(a)에 넣어주고 true를 반환한다.
    • 다음 순열이 없으면 false를 반환

공부내용 🎯


갑자기 do-while문이 헷갈려서 찾아보았다.

profile
까먹지않기..저장저장.📝

0개의 댓글