[Programmers][Lv.3]キューの方法
4364 ワード
[問題リンク]-https://programmers.co.kr/learn/courses/30/lessons/12936
問題の説明
せいげんじょうけん
に答える
そのため、私はもう一つの解決策を考えなければなりません.すぐに工場を通じてルールを見つけることができます.の総数はいくつかのグループに分けることができ、 の束の順序によって、順序をビット単位で計算します. そして次の位置を求めるために順序を再設定した. 最初にkに-1を加えたのは、例を加えても
結果はいつも次の値が出てきて、試して合格しました.
通過後、他の人の草を見ると、元はkがちょうど分かれていたので、0になっていた場合…
したがって、
問題の説明
せいげんじょうけん
に答える
import math
def solution(n, k):
answer = []
k -= 1
order = [i for i in range(1, n+1)] # 순서 생성
for i in range(n):
num = math.factorial(len(order))
temp = num // len(order) # 현재 차례가 몇가지 경우의 수인지
idx = (k // temp) # 현재 차례가 몇 번째 수가 와야하는지
k %= temp # 다음 차례가 됨에 따라 차례 재 설정
answer.append(order.pop(idx)) # 현재 차례 숫자 answer에
return answer
最初はPermutationを使いましたが、効率の問題でタイムアウトに失敗しました.そのため、私はもう一つの解決策を考えなければなりません.すぐに工場を通じてルールを見つけることができます.
結果はいつも次の値が出てきて、試して合格しました.
通過後、他の人の草を見ると、元はkがちょうど分かれていたので、0になっていた場合…
したがって、
answer.append
部を以下のコードに変更すると、より論理的になる.if k == 0:
answer.append(order.pop(idx-1))
else:
answer.append(order.pop(idx))
結果Reference
この問題について([Programmers][Lv.3]キューの方法), 我々は、より多くの情報をここで見つけました https://velog.io/@meoldae/ProgrammersLv.3-줄-서는-방법テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol