- 문제 설명
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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 함수를 작성해주세요.
- 제한 사항
- 입출력 예
- 접근법
문제 내용과 출력 예시를 보았을때 굉징히 쉽게 해결할 줄 알았던 문제
파이썬을 공부하면서 배운 numpy와 dict를 이용해 해결하려고 했으나 실패하고
다른 방법으로 문제를 해결해 보았다.
문제 풀이 중 2가지에서 어려움을 겪었다.
첫번째는 정답 개수에 따른 1,2,3번 학생의 출력이었다.
여러방법을 찾다가 가장 큰 값을 비교하여 같으면 인덱스 값에 +1을 하여
리스트에 넣어 해결하였다
두번째는 채점과정에서 발생하였다.
answers의 값이 학생들이 찍는 패턴 이상으로 주어졌을 경우
사이클을 생각하지 못하고 코드를 작성하여 실패가 나왔다.
이걸 해결하기 위해서 여러가지 시도 끝에
나머지 값을 찾아주는 %을 활용하여 해결할 수 있었다.
문제를 풀면서 발생한 큰 사건은 너무도 오래걸렸다는 것이다.
3시간 동안 풀다가 지쳐서 일어서고 집 밖을 나가기를 반복하고
겨우 풀 수 있었다. 😥
덕분에 계획한 다른 공부에 시간을 줄여야할것 같다.
=============================================================
복습 전 풀이
def solution(answers):
student_answers = [[1, 2, 3, 4, 5],
[2, 1, 2, 3, 2, 4, 2, 5],
[3, 3, 1, 1, 2, 2, 4, 4, 5, 5]]
answer = []
result = [0,0,0]
for i, quiz_answer in enumerate(answers):
for j, student_answer in enumerate(student_answers):
if quiz_answer == student_answer[i % len(student_answer)]:
result[j] += 1
maxvalue = max(result)
for i in range(len(result)):
if result[i] == maxvalue:
answer.append(i+1)
return answer
복습 시 풀이
def solution(answers):
patterns = [[1,2,3,4,5],[2,1,2,3,2,4,2,5],[3,3,1,1,2,2,4,4,5,5]]
result = []
answer = []
for i in patterns:
cnt = 0
if len(answers) > len(i):
i = i * (len(answers) // len(i) + 1)
for a, p in zip(answers, i):
if a-p == 0:
cnt+=1
result.append(cnt)
max_value = max(result)
for i in range(len(result)):
if max_value == result[i]:
answer.append(i+1)
return answer