[完全探索]模擬試験-PISN



質問する


数学は数学を放棄する人の略語である.「囚人3人組」は模擬試験で数学の問題を全部撮りたいと思っている.最初の問題から最後の問題まで、執胞子は以下の通りである.
1番捕手の撮り方:1,2,3,4,5,1,2,3,4,5...
2番捕手の撮り方:2、1、2、3、2、4、2、5、2、2、3、2、4、2、5...
3番捕手の撮り方:3,3,1,1,2,2,4,5,5,3,3,1,2,2,4,5,5...
最初の問題から最後の問題までの正解が順番に並んでいる場合は、最も多くの質問に答えた人が誰なのか、答えを並べて返すように解答関数を書いてください.

せいげんじょうけん


試験には最大10000問が含まれている.
質問の答えは1 2 3 4 5のうちの1つです.
点数が一番高い人が何人かいる場合は、戻った値を昇順に並べてください.

I/O例


answers return
[1,2,3,4,5][1]
[1,3,2,4,2][1,2,3]

に答える

def solution(answers):
    answer = []
    one = [1,2,3,4,5]
    two = [2,1,2,3,2,4,2,5]
    thr = [3,3,1,1,2,2,4,4,5,5]
    scores = [0,0,0]
    for i in range(len(answers)):
        if one[i%len(one)] == answers[i]:
            scores[0] += 1
        if two[i%len(two)] == answers[i]:
            scores[1] += 1
        if thr[i%len(thr)] == answers[i]:
            scores[2] += 1
    for i in range(3):
        if scores[i] == max(scores):
            answer.append(i+1)
    return answer

別の解釈

ddef 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

💡TIL


📌インデックス番号と要素を同時に使用する必要がある場合は、列挙を使用します.
for idx, value in enumerate(t):
    print(idx,value)
0 1
1 5
2 7
3 33
4 39
5 52