[プログラマー]Brute Force Search模擬試験


[プログラマー]>テストコード>完全探索>シミュレーション試験
1.問題の説明
数学は数学を放棄する人の略語である.「囚人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, ...
最初の問題から最後の問題までの正解が順番に並んでいる場合は、最も多くの質問に答えた人が誰なのか、答えを並べて返すように解答関数を書いてください.
1.制限条件
  • 試験には最大10000問が含まれています.
  • 題の正解は1,2,3,4,5の1つです.
  • 点数が一番高い人が何人かいる場合は、返される値を昇順に並べてください.
  • 2.I/O例
    answersreturn[1,2,3,4,5][1][1,3,2,4,2][1,2,3]
    2.解答
    アルゴリズムの実施に重点を置き,3人の採点を同時に行うことができる.
    各インデックスは採点され、各人の答えがテーブルのサイズに一致する条件を提供します.与えられたすべての問題が採点された場合、文を終了し、最も多くの答えを見つけて、条件に合致する人を見つけます.
    def solution(answers):
        answer = []
        # 각 사람의 정답 찍기 리스트
        first = [1,2,3,4,5]
        second = [2,1,2,3,2,4,2,5]
        third = [3,3,1,1,2,2,4,4,5,5]
        
        # 주어진 정답을 비교할 수 있게 사용할 인덱스를 정의
        ans_idx = 0
        first_idx = 0
        second_idx = 0
        third_idx = 0
        
        # 각 수포자 순서대로 맞춘 정답 수 입력 리스트
        score = [0, 0, 0]
        
        # 정답 채점!!
        while True:
        	# 각 사람의 정답 찍기 리스트 크기를 넘어가면 자동으로 처음 원소(0)로 변환
            if first_idx == len(first):
                first_idx = 0
            if second_idx == len(second):
                second_idx = 0
            if third_idx == len(third):
                third_idx = 0
            
            # 문제의 정답과 각 사람의 답
            ans = answers[ans_idx] 
            fir = first[first_idx]
            sec = second[second_idx]
            thi = third[third_idx]
            
            # 정답 비교!!
            if fir == ans:
                score[0] += 1
            if sec == ans:
                score[1] += 1
            if thi == ans:
                score[2] += 1
            
            # 다음 문제의 인덱스(순번)
            ans_idx += 1
            first_idx += 1
            second_idx += 1
            third_idx += 1
            
            # 문제가 끝났다면 while 문 탈출
            if ans_idx == len(answers):
                break
        
        # 최고 점수 정의
        high_score = max(score)
        
        # 자신의 점수가 최고 점수와 같다면 answer 리스트에 추가
        for idx, sco in enumerate(score):
            if sco == high_score:
                answer.append(idx + 1)
                
        return answer