第45回【Python】辞書順に出力 3、【文字列の配列】辞書順に出力 Boss

現在取り組んでいるのは、paiza ラーニング問題集「配列メニュー」になります。

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

Python をゼロから勉強してみよう、のコーナー 45 回目です。

やりたいことがどんどん溜まっています。とにかく時間がない。年度替わりから初月2ヶ月目くらいまでは、毎年、寝る時間が惜しいくらい忙しいです。ありがたいことに。しかし、手を付けられないままやりたいことが増えていって、ちょっとイライラ。

それでは、今日も頑張ってみようと思います。

辞書順に出力 3

1 行目に整数 N が与えられます。
2 行目に N 個の文字列 s_1, s_2, …, s_N が半角スペース区切りで与えられます。
N 個の文字列を辞書順に並べ替え、改行区切りで出力してください。


すべてのテストケースにおいて、以下の条件をみたします。

・* N は 1 以上 5 以下の整数
・* s_i (1 ≤ i ≤ N) は数字または大文字・小文字のアルファベットからなる長さ 1 以上 10 以下の文字列


3
b c a

前回に引き続き、便利な関数があるので、難しくはない。破壊的(sort)に行うか、非破壊的(sorted)に行うかの違いくらい?

Python
N = int(input())
L = input().split()
L.sort()
for li in L:
    print(li)
VBA
N = Cells(1, 1)
L = Array(Split(Cells(2, 1), " "))
L = Application.WorksheetFunction.Sort(L, 1, 1, True)
For Each li In L
    Debug.Print li
Next
VBA(別解)
N = Cells(1, 1)
L = Split(Cells(2, 1), " ")
For i = 0 To N - 1
    Cells(i + 3, 1) = L(i)
Next
Range(Cells(3, 1), Cells(N + 2, 1)).Sort key1:=Cells(3, 1), order1:=xlAscending, Header:=xlNo
For Each li In Range(Cells(3, 1), Cells(N + 2, 1))
    Debug.Print li
Next

配列の要素数 N を活用できた。素敵。

【文字列の配列】辞書順に出力 Boss

1 行目に整数 N, K が与えられます。
2 行目に N 個の文字列 s_1, s_2, …, s_N が半角スペース区切りで与えられます。
N 個の文字列を辞書順に並べ替え、K 番目の文字列を出力してください。


すべてのテストケースにおいて、以下の条件をみたします。

・* N は 1 以上 5 以下の整数
・* K は 1 以上 N 以下の整数
・* s_i (1 ≤ i ≤ N) は数字または大文字・小文字のアルファベットからなる長さ 1 以上 10 以下の文字列


5 2
e d c b a

並べ替えた後に、並べ替えたリストから文字列を取得する。Boss らしく手順が増えて複雑に見えるが、やっていることは単純です。

Python
N,K = map(int,input().split())
L = input().split()
L.sort()
print(L[K-1])
VBA
NK = Split(Cells(1, 1), " ")
N = Val(NK(0))
K = Val(NK(1))
L = Array(Split(Cells(2, 1), " "))
L = Application.WorksheetFunction.Sort(L, 1, 1, True)
Debug.Print L(K)
VBA(別解)
NK = Split(Cells(1, 1), " ")
N = Val(NK(0))
K = Val(NK(1))
L = Split(Cells(2, 1), " ")
For i = 0 To N - 1
    Cells(i + 3, 1) = L(i)
Next
Range(Cells(3, 1), Cells(N + 2, 1)).Sort key1:=Cells(3, 1), order1:=xlAscending, Header:=xlNo
Debug.Print Cells(K + 2, 1)

最後に

配列をあーだこーだする作業は、かなり多い気がしている。Python はずば抜けて書くのが楽だなぁと感じる今日この頃。そして、コードが理解しやすい。

一発で対応可能な関数がなくても、必ず対応方法はあるはず。最悪自分で作ればいいわけだし。自分で作るためのアルゴリズムは閃きだと思っていて、そのためには結局、たくさんコードを書くことが必要なんだろうなぁと思っている。

たくさん書こう。

引き続き、よろしくお願いいたします!

Pythonpaiza,学習,Python

Posted by LeoSaki