본문 바로가기

알고리즘/프로그래머스

[프로그래머스 코딩테스트 고득점 Kit / 완전탐색] 모의고사 (python)

728x90

풀이 

def solution(answers):
    answer = []
    s1 = [1, 2, 3, 4, 5]
    s2 = [2, 1, 2, 3, 2, 4, 2, 5]
    s3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    
    d = dict.fromkeys([1, 2, 3], 0)
    
    for i in range(len(answers)):
        if answers[i] == s1[i % len(s1)]:
            d[1] += 1
        if answers[i] == s2[i % len(s2)]:
            d[2] += 1
        if answers[i] == s3[i % len(s3)]:
            d[3] += 1
            
    sorted_list = sorted(d.items(), key = lambda x: (-x[1], x[0]))
    
    for i in sorted_list:
        if i[1] == sorted_list[0][1]:
            answer.append(i[0])
        else:
            break
    
    return answer

내 풀이

  • 학생 1, 2, 3은 각각의 규칙대로 번호를 찍기 때문에 순환 큐 형식으로 반복문을 돌면서 ( %len(학생) ) 답과 맞는지 확인한다. 학생 별 정답 수는 딕셔너리를 만들어서 저장했다.
  • 반복문을 다 돌고 나서 {학생 : 맞힌 정답 수} 로 저장되어 있는 딕셔너리를 정답수는 내림차순으로, 학생은 오름차순으로 정렬하여 sorted_list에 저장한다.
  • sorted_list 전체 반복문을 돌면서 맨 처음 요소(가장 많은 정답수)와 맞힌 정답수가 같으면 계속 그 학생은 answer에 추가해주고, 아니라면 거기서 반복문을 멈춘다.(그 아래로는 정답수가 낮은 애들뿐이므로)
반응형