본문 바로가기

Python/프로그래머스

[프로그래머스] [Python] 모의고사

문제 풀이

 

def solution(answers):
    answer = []
    
    # 수포자의 찍는 방식
    math_hater = [[1, 2, 3, 4, 5],
                  [2, 1, 2, 3, 2, 4, 2, 5],
                  [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]]

    # 수포자의 점수 배열
    answer_cnt = []

    # 각 수포자(man)를 돌면서
    for man in math_hater:
    
        # 점수 저장을 위한 변수. 하단의 for문을 다 돈 후 0으로 계속 초기화된다.
        cnt = 0
        
        # 정답을 확인한다.
        for i in range(len(answers)):
        
            # 각 수포자마다 찍는 방식의 주기가 다르다. 이를 처리하기 위해서
            # i % len(man), 각 수포자의 찍는 주기로 % 하여 해당 주기를 루프하도록 한다.
            if answers[i] == man[i % len(man)]:
            
                # 그렇게 체크한 정답이 맞을 경우 cnt += 1
                cnt += 1
        
        # 상단의 for문이 다 돌면 cnt가 해당 수포자의 점수를 나타내는 것이다. 이를 answer_cnt에 삽입.
        answer_cnt.append(cnt)
       

    # 수포자의 점수 배열을 enumerate함으로써 해당 수포자에게 고유번호를 부여
    # start=1을 사용하여 시작 인덱스를 0이 아닌 1로 설정한다.
    # person은 고유번호를, score는 점수를 나타낸다.
    for person, score in enumerate(answer_cnt, start=1):
    
        # score가 해당 배열에서의 최댓값이라면(가장 높은 점수를 받은 사람이라면)
        if score == max(answer_cnt):
            
            # 해당 person을 answer에 삽입.
            answer.append(person)

    return answer

 

 

 

문제 링크

 

programmers.co.kr/learn/courses/30/lessons/42840?language=python3

 

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

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

programmers.co.kr