도구스개발

순열 순위(랭크)·Lehmer 코드 계산기

순열이 사전순으로 몇 번째인지 구하고, 번호에서 순열을 되찾습니다. 레머 코드와 계승진법 자리값을 함께 보여 주며, 조합수 체계로 부분집합의 번호도 냅니다. 큰 수는 BigInt로 정확히 셉니다.

공백이나 쉼표로 나눠 적습니다. 구분자가 없으면 글자 하나씩으로 봅니다

사전순 번호 (0부터)

13

24가지 가운데 14번째 · 사전순 첫 순열은 1 2 3 4

0부터 세는 번호 (랭크)13
1부터 세는 순번14번째
전체 개수 4!24가지
레머 코드[2, 0, 1, 0]
다음 순열3 2 1 4
이전 순열3 1 2 4
번호를 다시 순열로 되돌리면원래와 같음

계승진법으로 읽기 — 랭크 = Σ Lᵢ · (n−1−i)!

자리놓은 것건너뛴 개수 Lᵢ자리값보태는 값
1323! = 612
2102! = 20
3411! = 11
4200! = 10
합계13
레머 코드는 «오른쪽에 남은 것 중 나보다 작은 것이 몇 개인지»입니다. 첫 자리에서 k개를 건너뛰었다면 그 k개마다 나머지 (n−1)!가지가 통째로 앞에 놓입니다. 자리마다 그렇게 «건너뛴 개수 × 남은 자리의 계승»을 더하면 전수 나열 없이 사전순 번호가 바로 나옵니다. 이것이 자리값이 1!, 2!, 3!인 계승진법이며, i번째 자리에 올 수 있는 값이 0..i로 제한되는 것이 10진법과 다른 점입니다.
큰 수는 BigInt로 셉니다. 배정도 실수는 23!부터 소리 없이 틀립니다. 21!은 이미 안전정수 한계(2⁵³ ≈ 9.0×10¹⁵)를 넘지만, 계승에는 2의 거듭제곱 인수가 많이 들어 있어 21!·22!는 우연히 정확하게 표현됩니다. 실제로 어긋나기 시작하는 것은 23!(정확한 값 25,852,016,738,884,976,640,000 대신 …978,212,864가 나옵니다)부터입니다. «21!부터 틀린다»고 외워 두면 20 언저리만 확인하다 놓치기 쉽습니다.
같은 항목이 두 번 나오는 순열(중복순열)은 받지 않습니다. «BANANA»처럼 같은 글자가 겹치면 사전순 번호를 세는 식이 달라집니다(계승 대신 다항계수를 씁니다). 여기서는 서로 다른 항목만 다루고, 겹치면 어느 항목이 겹쳤는지 알려 드립니다.
몇 가지인지 세는 계산기와는 다릅니다. «순열·조합 계산기»는 nPr·nCr처럼 «모두 몇 가지인가»를 셉니다. 이 계산기는 그중 하나를 집어 «사전순으로 몇 번째인가»를 구하고, 번호에서 순열을 되찾습니다. 무작위 순열을 재현 가능하게 저장하거나, 경우의 수를 통째로 들고 있지 않고 번호만으로 나눠 처리할 때 쓰는 방식입니다.

사용 방법

  1. 1«순열 → 번호»에 순열을 적습니다. 공백·쉼표로 나누거나 «dcba»처럼 붙여 써도 됩니다.
  2. 2사전순 번호와 레머 코드, 계승진법 자리별 계산이 함께 나옵니다.
  3. 3«번호 → 순열»로 바꾸면 항목 개수와 번호에서 순열을 되찾습니다.
  4. 4«조합 번호»에서는 n개 중 k개를 고른 부분집합의 사전순 번호를 냅니다.

자주 묻는 질문

레머 코드를 계승진법으로 읽습니다. 각 자리에서 «오른쪽에 아직 남아 있는 것 중 지금 놓은 것보다 작은 것이 몇 개인지»를 세면 그것이 레머 코드 Lᵢ이고, 랭크 = Σ Lᵢ·(n−1−i)!입니다. 첫 자리에서 두 개를 건너뛰었다면 그 두 개마다 나머지 (n−1)!가지가 통째로 앞에 놓이기 때문입니다.

순열을 계승진법 숫자로 옮긴 표기입니다. 예를 들어 [2, 0, 3, 1]의 레머 코드는 [2, 0, 1, 0]이고, 이를 자리값 3!, 2!, 1!, 0!으로 읽으면 2·6 + 0·2 + 1·1 + 0·1 = 13이 됩니다. 실제로 네 개짜리 순열을 사전순으로 늘어놓으면 [2,0,3,1]이 13번(0부터)입니다.

자리값이 1, 10, 100이 아니라 1!, 2!, 3!이고, i번째 자리에 올 수 있는 값이 0부터 i까지로 제한됩니다. 그래서 n자리 계승진법 수는 0부터 n!−1까지를 빠짐없이 한 번씩 나타내며, 그것이 순열과 번호가 일대일로 맞아떨어지는 이유입니다.

배정도 실수(double)는 23!부터 값이 소리 없이 틀리기 때문입니다. 21!은 이미 안전정수 한계 2⁵³을 넘지만 계승에는 2의 거듭제곱 인수가 많아 21!·22!는 우연히 정확하게 표현됩니다. 23!은 정확한 값이 25,852,016,738,884,976,640,000인데 double로는 …978,212,864가 나옵니다. 랭크는 큰 수를 정확히 세는 것이 존재 이유라 전부 정수로 다룹니다.

조합수 체계(combinatorial number system)로 셉니다. 앞자리를 c로 정하면 그 아래로 C(남은 원소 수, 남은 자리 수)가지가 딸려 오므로, 건너뛴 앞자리마다 그 이항계수를 더합니다. 로또 6/45로 말하면 [1 2 3 4 5 6]이 0번, [40 41 42 43 44 45]가 마지막 8,145,059번입니다.

받지 않습니다. «BANANA»처럼 같은 글자가 겹치면 사전순 번호를 세는 식이 달라져(계승 대신 다항계수를 씁니다) 결과가 어긋납니다. 이 계산기는 서로 다른 항목만 다루고, 겹치면 어느 항목이 겹쳤는지 알려 줍니다.

순열 계산기는 nPr처럼 «모두 몇 가지인가»를 셉니다. 이 계산기는 그중 하나를 집어 «사전순으로 몇 번째인가»를 구하고 번호에서 순열을 되찾습니다. 경우의 수를 통째로 들고 있지 않고 번호만으로 나눠 처리하거나, 무작위 순열을 번호 하나로 재현 가능하게 저장할 때 쓰는 방식입니다.

전송되지 않습니다. 계산은 모두 브라우저 안에서 이루어지고 넣은 값은 이 기기에만 남습니다.

알아두면 좋은 점

  • 서로 다른 항목만 받습니다. 같은 항목이 겹치는 중복순열은 다항계수로 세야 해서 범위 밖입니다.
  • 순열 항목은 30개까지 받습니다. 30!은 이미 2.6×10³²이라 번호가 32자리입니다.
  • 번호는 0부터 셉니다. 화면에는 «몇 번째»로 읽는 1부터의 순번도 함께 냅니다.
  • 숫자만 넣으면 문자열 사전순이 아니라 크기순으로 정렬합니다. «9 10 2»는 2 < 9 < 10으로 봅니다.
  • 조합 번호의 원소는 화면에서 1부터 n까지로 적고, 안에서 0부터로 바꿔 계산합니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 2일 · 결과는 참고용 추정치입니다.