コーディングテスト練習-シミュレーション試験(完全ナビゲーション)


コードテスト練習-模擬試験
最も多くの問題を当てた人を救う.

#正解コード


一番多かった人が1人だったことだけを考えれば簡単に手に入るのですが、一番多かった値はいくつもあるので表現しづらいです.そこで,検索により辞書から複数の最値を取得するlist理解方式を用いた.
def solution(answers):
    first_member = [1,2,3,4,5] # 5번마다 반복
    second_member = [2,1,2,3,2,4,2,5] # 8번마다 반복
    third_member = [3,3,1,1,2,2,4,4,5,5] # 10번마다 반복

    answer_member = {1:0, 2:0, 3:0}
    idx = 0

    for i in answers:
        if i == first_member[idx % 5]:
            answer_member[1] += 1
        if i == second_member[idx % 8]:  
            answer_member[2] += 1
        if i == third_member[idx % 10]:
            answer_member[3] += 1
        idx += 1

    return [k for k, v in answer_member.items() if max(answer_member.values()) == v]

#参照コード


構造は同じですが、列挙が使われているのが印象的でした.for文ではindexが必要なときによく使われ、毎回忘れてしまいます.今度こそはっきり覚えなければならない.
def solution(answers):
    pattern1 = [1,2,3,4,5]
    pattern2 = [2,1,2,3,2,4,2,5]
    pattern3 = [3,3,1,1,2,2,4,4,5,5]
    score = [0, 0, 0]
    result = []

    for idx, answer in enumerate(answers):
        if answer == pattern1[idx%len(pattern1)]:
            score[0] += 1
        if answer == pattern2[idx%len(pattern2)]:
            score[1] += 1
        if answer == pattern3[idx%len(pattern3)]:
            score[2] += 1

    for idx, s in enumerate(score):
        if s == max(score):
            result.append(idx+1)

    return result

*dictionaryでvalueが最も高いキーワードを検索


1.max()、get()関数の使用


専制的.get(key):鍵の値を出力する
通常keyの値を取得するために使用されますが、get関数の出力値value値に基づいて、次のmax関数はvalue値が最も近いkeyを出力します.

2.listで理解する


dictionaryから最大値のキー値を抽出します.
ex_dic = {'a':1, 'b':2, 'c':3, 'd':3}
print(max(ex_dic, key=ex_dic.get)) # 'c'
print([key for key, value in ex_dic.items() if max(ex_dic.values()) == value]) 
# ['c', 'd']

[区別]


max():valueの最も近い値であるキーワード「c」のみを出力します.
list completion:valueの最値にすべてのキーを出力

[結論]


最大1個=>max()
最大数=>list理解

*enumerate()


繰り返し文を使用する場合はindex値が必要な場合に使用します.
列挙()は、基本的にインデックスと要素からなるメタグループを作成します.
index値を単独で使用する場合は、2つのパラメータが受信されます.
開始インデックス値はstartオプションで置き換えることができます.
for entry in enumerate(['A', 'B', 'C']): # (0, 'A') (1, 'B') (2, 'C')
	print(entry)
for i, letter in enumerate(['A', 'B', 'C']): # 0 A 1 B 2 C
	print(i, letter)
for i, letter in enumerate(['A', 'B', 'C'], start=1): # 1 A 2 B 3 C
	print(i, letter)