[プログラマー]完全ナビゲーション-シミュレーション試験(第1級)

3082 ワード

模擬試験


解法

  • 各捕獲者の答えを探すルール.
    i 1番目の答え(iは0から)=
    1番小胞子:iを5で割った後+1
    2番小胞子:iは偶数-2、iは奇数-iを2で割った分、さらに4で割った余数が0なら1は1、1は3、2は4、3は3、3は5
    3番小胞子:iを2で割った商を5で割った残数が0であると、3、1が1、2が2、3が4、4が5
  • となる.
  • 解答リストを被捕者の解答と全て比較し、各被捕者の正解個数を算出しcountリストに保存する.
  • countリストの最低価格を見つけて、その数字を答えに追加します.
  • Python Code

    def solution(answers):
        answer = []
        count = [0, 0, 0]   #각 수포자들의 정답 개수 저장
        for i in range(len(answers)):
            student1 = i%5 + 1
            
            if i%2 == 0:    #i가 짝수
                student2 = 2
            else:   #i가 홀수
                temp = int(i/2) % 4
                if temp == 0:
                    student2 = 1
                elif temp == 1:
                    student2 = 3
                elif temp == 2:
                    student2 = 4
                else:
                    student2 = 5
                    
            temp = int(i/2) % 5
            if temp == 0:
                student3 = 3
            elif temp == 1:
                student3 = 1
            elif temp == 2:
                student3 = 2
            elif temp == 3:
                student3 = 4
            else:
                student3 = 5
                
            if student1 == answers[i]:
                count[0] += 1
            if student2 == answers[i]:
                count[1] += 1
            if student3 == answers[i]:
                count[2] += 1
                
        max = -1
        #정답 개수의 최대값 찾기
        for i in range(len(count)):
            if count[i] > max:
                max = count[i]
                answer.clear()
                answer.append(i+1)
            elif count[i] == max:
                answer.append(i+1)
            
        return answer

    エラーと解決


    初めて最大回答者を間違えたので正解率は50%です.
    max = 0
        for i in range(len(count)):
            if count[i] >= max:
                max = count[i]
                answer.append(i+1)
    答えの数が一番多い学生を追加するために、このように編集すると、一番値を更新するとき、前の一番値の学生が答えに残ります.したがって,答えが[2,1,2,3,2,4,2,5]の場合,答えは[1,2]となり,誤りが生じる.(元の答えは[2].
    max = -1
        for i in range(len(count)):
            if count[i] > max:
                max = count[i]
                answer.clear()
                answer.append(i+1)
            elif count[i] == max:
                answer.append(i+1)
    最値を更新するときは、答えを空にしてから追加し、数字と最値が同じときにすぐに答えに追加するように変更します.

    他人の解答


    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]
    このようにして,最初にパターンをリストに保存し,その後,各リストの長さを用いてインデックスを行い,各胞子の答えを得る解が多く,コードがより簡単になった.
    最大正解者を求める場合、max関数を用いて最初から正解の最値を求め、キャッチャーの答えの個数を最値に等しくすると答えに加算する方法もありますが、これもコードが簡単です.

    新知


    他人の解答を見て、よく「枚挙」が出てくるので調べてみました.これまでfor文の変換にはrangeのみが書かれており、列挙を使用してインデックス番号とセット内の要素をtuple形式に戻すことができます.
    a = [2, 1, 2, 3, 2, 4, 2, 5]
    for b in enumerate(a):
    	print(b)
    出力結果
    あるいは
    a = [2, 1, 2, 3, 2, 4, 2, 5]
    for i, v in enumerate(a):
    	print(i, v)
    出力結果