[문제]

https://programmers.co.kr/learn/courses/30/lessons/42840

 

코딩테스트 연습 - 모의고사

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는

programmers.co.kr

 

[풀이]

이 문제는 enumerate만 알면 쉽게 풀 수 있는 문제이다.

enumerate

  • 반복문 사용 시 몇 번째 반복문인지 확인할 수 있다
  • 인덱스 번호와 컬렉션의 원소를 tuple형태로 반환

또, 시험은 최대 10,000 문제로 구성되어 있기 때문에 각 학생이 찍는 패턴을 반복하기 위해 % (나머지) 를 사용한다. 1번 학생의 0번 답이 맞았는지 구하기 위해서는 1번 학생이 찍는 리스트의 (0 % 5) 인덱스 값을 확인해야 한다. 1번 학생의 6번 문제의 답은 (6 % 5), 즉 1번 인덱스값인 '2'로 찍는다.

이를 일반화하면 one[i % len(one)] 이 i번 문제에 대한 1번 학생의 답이 된다.

 

[코드]

def solution(answers):
    scores = [0, 0, 0]

    one = [1, 2, 3, 4, 5]
    two = [2, 1, 2, 3, 2, 4, 2, 5]
    three = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]

    for i, answer in enumerate(answers):
        if answer == one[i % len(one)]:
            scores[0] += 1
        if answer == two[i % len(two)]:
            scores[1] += 1
        if answer == three[i % len(three)]:
            scores[2] += 1

    answer = []
    max_score = max(scores)
    for i, score in enumerate(scores):
        if score == max_score:
            answer.append(i+1)
    return answer