https://school.programmers.co.kr/learn/courses/30/lessons/12936
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
vector의 erase()함수를 사용해 남은 숫자를 편리하게 관리할 수 있습니다.
#include <string>
#include <vector>
using namespace std;
long long fac(int a){
long long ans = 1;
for(int i=1;i<=a;i++){
ans*=i;
}
return ans;
}
vector<int> solution(int n, long long k) {
vector<int> answer;
vector<int> num;
long long now=k;
int cnt=1;
for(int i=1;i<=20;i++){
num.push_back(i);
}
while(cnt != n){
long long tmp = fac(n-cnt);
int idx = (now-1) / tmp;
answer.push_back(num[idx]);
num.erase(num.begin()+idx);
cnt++;
now %= tmp;
// -1 해줘야 하므로 0일 경우 같은 수로 유지
if (now == 0)
now = tmp;
}
answer.push_back(num[0]);
return answer;
}
'프로그래머스 > Lv.2' 카테고리의 다른 글
[C++] 프로그래머스 혼자 놀기의 달인 (0) | 2024.05.07 |
---|---|
[C++] 프로그래머스 쿼드압축 후 개수 세기 (0) | 2024.01.18 |
[C++] 프로그래머스 [1차] 프렌즈4블록 (1) | 2023.12.17 |
[C++] 프로그래머스 메뉴 리뉴얼 (1) | 2023.11.26 |
[C++] 프로그래머스 마법의 엘리베이터 (0) | 2023.11.14 |