728x90
반응형
🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/12936
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
반응형
728x90
👩💻 코드
#include <string>
#include <vector>
#include <map>
#include <iostream>
using namespace std;
vector<long long> GetFactorials(int n){
vector<long long> factorial(n+1, 1);
for(int i=2; i<=n; i++){
factorial[i] = factorial[i-1] * i;
}
return factorial;
}
vector<int> solution(int n, long long k) {
vector<int> answer;
vector<long long> weights = GetFactorials(n-1);
vector<bool> used(n + 1, false);
k--;
for (int i = 0; i < n; i++) {
long long value = k / weights[n - 1 - i];
int count = 0;
for (int j = 1; j <= n; j++) {
if (!used[j]) {
if (count == value) {
answer.push_back(j);
used[j] = true;
break;
}
count++;
}
}
k %= weights[n - 1 - i];
}
return answer;
}
📝 풀이
각 자릿수에 가능한 경우의 수는 (n-1)!입니다.
이를 이용하기 위해 미리 1부터 n-1까지 팩토리얼 값을 구하는 GetFactorials 함수를 구현합니다.
1부터 n까지의 숫자를 중복없이 사용하기 위해 vector<bool> used를 n+1 크기로 초기화 합니다.
k를 index로 활용하기 위해 1를 빼줍니다.
k를 i의 가중치로 나누어 현재 자릿수에 들어가야 하는 숫자를 구합니다.
사용되지 않은 숫자 중 value번째가 현재 자릿수에 들어가야 하는 숫자입니다.
해당 숫자를 찾았으면 answer에 psuh 합니다.
이후 k를 갱신하고 이 과정을 n번 반복합니다.
최종적으로 나열된 answer를 return 합니다.
728x90
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 리코쳇 로봇 (1) | 2024.10.06 |
---|---|
[프로그래머스] 테이블 해시 함수 (1) | 2024.10.06 |
[프로그래머스] 수식 최대화 (1) | 2024.10.04 |
[프로그래머스] 괄호 변환 (0) | 2024.10.04 |
[프로그래머스] 무인도 여행 (3) | 2024.10.03 |