アナログ「プログラマー」|完全ナビゲーション|Python



問題の説明
数学は数学を放棄する人の略語である.「囚人3人組」は模擬試験で数学の問題を全部撮りたいと思っている.最初の問題から最後の問題まで、執胞子は以下の通りである.
1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...
最初の問題から最後の問題までの正解が順番に並んでいる場合は、最も多くの質問に答えた人が誰なのか、答えを並べて返すように解答関数を書いてください.
せいげんじょうけん
試験には最大10000問が含まれている.
質問の答えは1 2 3 4 5のうちの1つです.
点数が一番高い人が何人かいる場合は、戻った値を昇順に並べてください.
I/O例
例回答:1[1,2,3,4,5][1]#2[1,3,2,4,2][1,2,3]
I/O例説明
I/O例1バブル1はすべての質問に答えた.逮捕者2はすべての問題を間違えた.逮捕者3はすべての問題を間違えた.だから一番多くの質問に答えた人は水泡子です.
I/O例#2各人が2問正解しました.
1.解答

def solution(answers):
    supo1 = [1, 2, 3, 4, 5]
    supo2 = [2, 1, 2, 3, 2, 4, 2, 5]
    supo3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]

    score = [0, 0, 0] # 각 수포자의 정답 수
    answer = []
    
# 입력 답안을 바탕으로 각 수포자의 정답 수를 반복문 돌림 
    for i in range(len(answers)): 
        if answers[i] == supo1[i % len(supo1)]: # 여기서 뒤의 숫자는 수포자의 정답이 반복되는 주기
            score[0] += 1
        if answers[i] == supo2[i % len(supo2)]:
            score[1] += 1
        if answers[i] == supo3[i % len(supo3)]:
            score[2] += 1

    winner = max(score) # 가장 많이 맞춘 수

    for i in range(len(score)):
        if winner == score[i]:
            answer.append(i + 1) # 인덱스이기 때문에 append할때는 + 1 

    return answer

print(solution([4, 5, 3, 4, 2, 2, 3, 1, 5, 2, 1, 3, 4])) # 결과 [3]
print(solution([1, 2, 3, 4, 5])) # 결과 [1]
print(solution([1, 3, 2, 4, 2])) # 결과 [1,2,3]
2.列挙関数の使用
def solution2(answers):
    supo = [[1, 2, 3, 4, 5], 
            [2, 1, 2, 3, 2, 4, 2, 5], 
            [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]] 

    score = [0] * len(supo)
    answer = []

    for i in range(len(supo)):
        for j in range(len(answers)):
            n = len(supo[i])
            if answers[j] == supo[i][j%n]:
                score[i] += 1
    
    for idx, max_score in enumerate(score):
        if max_score == max(score):
            answer.append(idx+1)

    return answer

print(solution2([4, 5, 3, 4, 2, 2, 3, 1, 5, 2, 1, 3, 4]))
print(solution2([1, 2, 3, 4, 5]))
print(solution2([1, 3, 2, 4, 2]))