PROGRAMMERS Python Lv1. 모의고사
이번 문제는 모의고사이다.
def solution(answers):
corr = [0,0,0]
win = []
math_1 = [1,2,3,4,5]
math_2 = [2,1,2,3,2,4,2,5]
math_3 = [3,3,1,1,2,2,4,4,5,5]
for i in range(len(answers)):
if math_1[(i%5)] == answers[i]:
corr[0] += 1
if math_2[(i%8)] == answers[i]:
corr[1] += 1
if math_3[(i%10)] == answers[i]:
corr[2] += 1
for j in range(3):
if max(corr) == corr[j]:
win.append(j+1)
return win
이 문제를 풀면서 중요하게 고려해야 할 건 두 가지가 있다.
- 세 명의 학생 모두 정답cycle의 길이가 다르기 때문에 주어진 answers를
%를 사용해서 인덱스를 바꿔서 비교하는 것이 필요하다.
- 정답을 맞힌 횟수를 저장하는 리스트인 corr에서
동점인 학생이 있다면 win 리스트에 append시켜야 한다는 것이다.
이 문제를 다 풀고, 다른 사람의 답을 확인했는데 enumerate를 사용해서
깔끔하게 푼 답이 있었다.
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
enumerate는 ‘순서가 있는 자료형(리스트, 튜플, 문자열)을 입력으로 받아
인덱스 값을 포함하는 enumerate 객체를 돌려준다.’ 따라서 idx는 answer에 해당하는
index 값을 가지고 있기에 이를 그대로 가져다 사용하면 된다는 장점이 있다.
이 답이 더 깔끔한 것 같아 enumerate를 앞으로도 잘 활용해야 할 것 같다.
혹시 제 풀이에 오류가 있거나
더 좋은 방법이 있다면 댓글 남겨주시면 감사드립니다.
댓글남기기