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)
정답 개수가 최대인 학생을 모두 추가하려고 이렇게 짰는데, 이렇게 짜면 최댓값이 업데이트될 때 그 전 최댓값을 가진 학생이 answer에 남아있는다. 따라서 answers가 [2, 1, 2, 3, 2, 4, 2, 5]인 경우 answer가 [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)
최댓값이 업데이트될 때는 answer를 비운 다음 추가하고, 수포자의 정답 개수와 최댓값이 같을 때만 바로 answer에 추가하도록 수정했다.
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함수를 이용해 처음부터 정답의 최댓값을 구한 후 수포자의 정답 개수가 최댓값과 같으면 answer에 추가하도록 하는 방법이 있었는데 이것도 코드가 훨씬 간단했다.
다른 사람의 풀이를 보다가 enumerate라는 것이 자주 나오길래 찾아봤다. 지금까지는 for문을 돌릴 때 range만 썼었는데, enumerate를 사용하면 인덱스 번호와 컬렉션의 원소를 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)
출력 결과