πŸ’»μ½”λ”©ν…ŒμŠ€νŠΈ λ¬Έμ œν’€μ΄24

μ§€λ―Όμ„œΒ·2023λ…„ 3μ›” 16일
0

coding test

λͺ©λ‘ 보기
23/30

Chapter12. κ΅¬ν˜„

[문제55] 쀄 μ„œλŠ” 방법 - Level2

nλͺ…μ˜ μ‚¬λžŒλ“€μ΄ 일렬둜 쀄을 μ„œκ³  μžˆμŠ΅λ‹ˆλ‹€. nλͺ…μ˜ μ‚¬λžŒλ“€μ—κ²ŒλŠ” 각각 1λ²ˆλΆ€ν„° nλ²ˆκΉŒμ§€ λ²ˆν˜Έκ°€ 맀겨져 μžˆμŠ΅λ‹ˆλ‹€.

nλͺ…μ˜ μ‚¬λžŒμ„ 쀄을 μ„œλŠ” 방법은 μ—¬λŸ¬κ°€μ§€ 방법이 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄μ„œ 3λͺ…μ˜ μ‚¬λžŒμ΄ μžˆλ‹€λ©΄ λ‹€μŒκ³Ό 같이 6개의 방법이 μžˆμŠ΅λ‹ˆλ‹€.

  • (1, 2, 3)
  • (1, 3, 2)
  • (2, 1, 3)
  • (2, 3, 1)
  • (3, 1, 2)
  • (3, 2, 1)

μ‚¬λžŒμ˜ 수 nκ³Ό, μžμ—°μˆ˜ kκ°€ μ£Όμ–΄μ§ˆ λ•Œ, μ‚¬λžŒμ„ λ‚˜μ—΄ν•˜λŠ” 방법을 사전 순으둜 λ‚˜μ—΄ν–ˆμ„ λ•Œ k번째 방법을 return ν•˜λŠ” solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

[μ œν•œμ‚¬ν•­]

  • n은 20 μ΄ν•˜μ˜ μžμ—°μˆ˜μž…λ‹ˆλ‹€.
  • kλŠ” n! μ΄ν•˜μ˜ μžμ—°μˆ˜μž…λ‹ˆλ‹€.

[λ¬Έμ œν’€μ΄]

from itertools import permutations

def solution(n, k):
	return list(permutations([i + 1 for i i range(n)]))[k - 1]

[μ½”λ“œμž‘μ„±]

1. 초기 μ„€μ • 진행

def solution(n, k):
	numbers = list(range(1, n + 1)
    answer = []
    k -= 1

2. κ³΅μ‹μœΌλ‘œ κ³„μ‚°ν•˜λ©° 숫자 μ°ΎκΈ°

from math import factorial
while numbers:
	idx, k = divmod(k, factorial(len(numbers) - 1))
    answer.apppend(numbers.pop(idx))

[μ „μ²΄μ½”λ“œ]

from math import factorial

def solution(n, k):
	numbers = list(range(1, n + 1)
    answer = []
    k -= 1
    
    while numbers:
		idx, k = divmod(k, factorial(len(numbers) - 1))
    	answer.apppend(numbers.pop(idx))
    
    return answer
profile
πŸ’» + πŸŽ₯

0개의 λŒ“κΈ€