문제
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,....
answer 배열이 주어질 때 가장 많이 맞힌 학생을 return해라.
내 코드
def solution(answers):
cycles = {
1:[1,2,3,4,5],
2:[2,1,2,3,2,4,2,5],
3:[3,3,1,1,2,2,4,4,5,5]
}
correct = {
1:0,
2:0,
3:0
}
i1, i2, i3 = 0, 0, 0
answer_len = len(answers)
for i in range(answer_len):
if i1 == 5:
i1 = 0
if i2 == 8:
i2 = 0
if i3 == 10:
i3 = 0
if cycles[1][i1] == answers[i]:
correct[1] += 1
if cycles[2][i2] == answers[i]:
correct[2] += 1
if cycles[3][i3] == answers[i]:
correct[3] += 1
i1 += 1
i2 += 1
i3 += 1
answer= []
max=10000
temp = sorted(correct.items(), reverse=True, key=lambda x: x[1])
max=temp[0][1]
for key in correct.keys():
if correct[key] == max:
answer.append(key)
return answer
문제 풀이
1. 수포자의 정답 사이클과 적중률을 dictionary로 선언한다.
2. answers 배열 요소의 개수만큼 반복문을 돌려서 1번 수포자는 5번, 2번 수포자는 8번, 3번 수포자는 10번씩 반복하여 answers 요소와 같은지 비교하고 같다면 correct의 value를 증가시킨다.
3. 시험은 최대 10000문제로, max를 10000으로 설정한 뒤 correct를 value로 오름차순하여
가장 앞에 있는 key의 value값으로 변경한다.
4. correct의 value가 max와 같으면 해당 value의 key를 answer 배열에 추가하고 return 시킨다.
'Python > Programmers' 카테고리의 다른 글
Lv.1-내적 구하기 (0) | 2021.07.07 |
---|---|
Lv.1-크레인 인형뽑기 (0) | 2021.07.07 |
Lv.1-체육복 (0) | 2021.07.07 |
Lv.1-로또의 최고 순위와 최저 순위 (0) | 2021.07.07 |
Lv.1-음양 더하기 (0) | 2021.07.07 |