順列や組み合わせの全列挙(ABC215C)
こんにちは。ABC214の記事が全然進みませんが早くも215が終わってしまいましたね。私は今回BまでのACを自己最速(約4分)で決められたのでパフォが過去最高になりました。嬉しい。
それから、このnoteを書くことが確実に自分の身になっていると最近感じています。これ何だっけ、って思ってもすぐに確認できるのいい。これからも続けていきたいですね。
長くなってしまいましたが、本題に入ります。
今回の問題
自分の解答(今回は自力でACした)
import itertools
W,K=map(str,input().split())
K=int(K)
all = set(itertools.permutations(W, len(W)))
ANS=sorted(all)
A=ANS[K-1] #リストAのK番目を指定したかったらpythonではK-1番目を指定しないといけない
A=''.join(A)
print(A)
今回は自力でACできました!
まあざっくり言うとitertoolsで順列を全列挙して、setで完全に重複する順列を消してsortedで並び替えて辞書をつくったってだけです。答えの指定が文字列なのでtapleを文字列に直す作業もしている。Cがこれでいいのかって感じはする。
itertoolsで順列とか、組み合わせを列挙する方法がいくらかあるのでそれを紹介してから閉じたいと思います。
今日のまとめ(itertoolsで順列を全列挙しよう)
import itertools
#importしないとエラーになるので注意
#重複あり、順列(何回同じのを選んでもいい、順番で区別する)
itertools.product('調べる文字列', repeat=選ぶ回数)
#重複なし、順列(同じのは1回しか選べない、順番で区別する)
itertools.permutations('調べる文字列',選ぶ回数)
#重複あり、組み合わせ(何回同じのを選んでもいい、順番では区別しない)
itertools.combinations_with_replacement('調べる文字列',選ぶ回数)
#重複なし、組み合わせ(同じのは1回しか選べない、順番では区別しない)
itertools.combinations('調べる文字列',選ぶ回数)
ちなみにこれらから返ってくるのはタプルです。中身いじくるにはリストに直す必要があります。
また、タプルでもjoin()は使えました。
この記事が気に入ったらサポートをしてみませんか?