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

csct3434

[level 2] 줄 서는 방법 - 12936 본문

프로그래머스

[level 2] 줄 서는 방법 - 12936

csct3434 2024. 2. 28. 19:51

문제 링크

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

#include <vector>
using namespace std;

vector<int> solution(int n, long long k) {
    if (n == 1) {
        return {1};
    }

    vector<int> answer(n, 0);
    int index = 0;

    long long a = 1;
    vector<int> digits;
    for (int i = 1; i <= n; i++) {
        a *= i;
        digits.push_back(i);
    }

    while (n > 2) {
        a /= n--;

        int subSequence = static_cast<int>(1 + (k - 1) / a);

        answer[index++] = digits[subSequence - 1];
        digits.erase(digits.begin() + (subSequence - 1));

        k -= (subSequence - 1) * a;
    }

    if (k == 1) {
        answer[index++] = digits[0];
        answer[index] = digits[1];
    } else {
        answer[index++] = digits[1];
        answer[index] = digits[0];
    }

    return answer;
}