수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.
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, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...
1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.
시험은 최대 10,000 문제로 구성되어있습니다.
문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.
| answers | return |
|---|---|
| [1,2,3,4,5] | [1] |
| [1,3,2,4,2] | [1,2,3] |
def solution(answers):
s1 = [1, 2, 3, 4, 5]
if len(s1) > len(answers):
s1 = s1[0:len(answers)]
else:
s1 = [1, 2, 3, 4, 5]*(len(answers)//5)
s1.extend(s1[0:(len(answers)%5)])
s2 = [2, 1, 2, 3, 2, 4, 2, 5]
if len(s2) > len(answers):
s2 = s2[0:len(answers)]
else:
s2 = [2, 1, 2, 3, 2, 4, 2, 5]*(len(answers)//8)
s2.extend(s2[0:(len(answers)%8)])
s3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
if len(s3) > len(answers):
s3 = s3[0:len(answers)]
else:
s3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]*(len(answers)//10)
s3.extend(s3[0:(len(answers)%10)])
check1 = [a-b for a,b in zip(s1, answers)]
check1 = [x for x in check1 if x==0]
check2 = [a-b for a,b in zip(s2, answers)]
check2 = [x for x in check2 if x==0]
check3 = [a-b for a,b in zip(s3, answers)]
check3 = [x for x in check3 if x==0]
maxscore = max(len(check1), len(check2), len(check3))
result = [[1, len(check1)], [2, len(check2)], [3, len(check3)]]
result = [x for x in result if x[1]==maxscore]
result.sort(key=lambda x:x[0])
result1 = [x[0] for x in result]
return result1
#print(solution([1, 2, 3, 4, 5]))
일단 수포자들이 찍는 방식의 패턴을 잘 캐치하기.
나는 학생들의 답안을 전부 만들어놓고 answer과 뺄셈을 통해 0이면 맞은 것이므로 0의 숫자를 세어서 점수를 계산했다.
상당히 하드코딩을 한 느낌이라 현타가 온다.
reference에 더 효율적인 코드로 작성한 예시를 달아놨으니 참고해서 다음부터는 스마트하게 코딩하자...
https://school.programmers.co.kr/learn/courses/30/parts/12230
https://iambeginnerdeveloper.tistory.com/97