Programmers Brute Forceシミュレーション試験
2668 ワード
[完全探索]模擬試験
Link: https://programmers.co.kr/learn/courses/30/lessons/42840?language=python3
問題の説明
数学は数学を放棄する人の略語である.「囚人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...
最初の問題から最後の問題までの正解が順番に並んでいる場合は、最も多くの質問に答えた人が誰なのか、答えを並べて返すように解答関数を書いてください.
せいげんじょうけん
I/O例
answers return
[1,2,3,4,5][1]
[1,3,2,4,2][1,2,3]
例の説明
は#1
捕手1はすべての質問に答えた.
逮捕者2はすべての問題を間違えた.
逮捕者3はすべての問題を間違えた.
だから一番多くの質問に答えた人は水泡子です.
はい#2
誰もが2つの問題に正解した.
Code
def solution(answers):
list_1 = [1, 2, 3, 4, 5]
list_2 = [2, 1, 2, 3, 2, 4, 2, 5]
list_3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
count = {id: 0 for id in range(1,4)}
for i in range(0,len(answers)):
if answers[i] == list_1[i%5]: count[1] += 1
if answers[i] == list_2[i%8]: count[2] += 1
if answers[i] == list_3[i%10]: count[3] += 1
count_list = sorted(count, key = lambda x: (-count[x],x))
answer = []
max_ = count[count_list[0]]
for x in count_list:
if count[x] == max_:
answer.append(x)
return answer
コード解析と説明
Output / Screen Shot
Better Code/より良いコード
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を使用する必要はありません.
Reference
この問題について(Programmers Brute Forceシミュレーション試験), 我々は、より多くの情報をここで見つけました https://velog.io/@kakasi18/ProgrammersBrute-Force모의고사テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol