순열
2020-12-23
layout: post
title: "백준 9742 - 순열"
author: "asadal"
tags: ["python", "파이썬", "백준", "순열", "permutations", "factorial"]
서로 다른 숫자와 문자로 이뤄진 집합과 위치가 주어졌을 때, 그 집합의 순열 중 주어진 위치의 순열을 구하는 프로그램.
import sys
for i in sys.stdin:
a, b = i.split() # 'bein', 20
print(a, b, '=', end=' ')
f, b = 1, int(b)-1
for i in range(len(a)):
f *= i + 1 # 전체 순열의 수(4!=24) 구하기(f = 24, b = 19)
if f <= b: # b가 전체 순열 수보다 많을 경우
print('No permutation')
continue
for i in range(len(a), 0, -1):
# 문자열(abcd)을 뒤에서부터 탐색(i = 4, 3, 2, 1)
f //= i # f = 6, 2, 1, 1
print(a[b//f], end='') # a[0], a[0], a[1], a[0]
a = a[:b//f] + a[b//f+1:] # bei, ei, e
b %= f # 1, 1, 0, 0
print()