코딩테스트/[PG] 문제 풀이

[프로그래머스] 완전탐색 - 모의고사

_JAEJAE_ 2021. 7. 26. 22:16

이 문제는 일정하게 답을 찍는 3명 중 가장 정답을 많이 맞춘 사람을 구하는 문제였다.

세 사람이 일정하게 찍는 패턴을 a, b, c에 리스트로 저장했다.

a, b, c는 각자의 길이만큼 반복되기 때문에 enumerate를 활용해서 받아온 인덱스를 각자의 길이로 나눈 값과 정답을 비교하면 된다.  

예를 들어 a의 경우 5개의 답이 반복된다. 

idx  0  1  2  3  4  5  6
 a  1  2  3  4  5  1  2

idx 5는 다시 idx 0과 정답이 같다. 그래서 idx % len(a)를 하면 다시 0번째 답과 비교를 하게 된다.

 

같은 방식으로 b, c도 인덱스를 각자의 길이로 나눠주고 최종적으로 score 리스트에 맞은 개수를 저장해준다.

 

이후 max함수를 활용해 구한 가장 많이 맞은 갯수와 a, b, c 가 맞은 갯수가 일치하면 answer리스트에 추가해줬다.

def solution(answers):
    answer = []
    
    a = [1, 2, 3, 4, 5]
    b = [2, 1, 2, 3, 2, 4, 2, 5]
    c = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    
    score = [0, 0, 0]
    for idx, ans in enumerate(answers):
        if a[idx%len(a)] == ans:
            score[0] += 1
        if b[idx%len(b)] == ans:
            score[1] += 1
        if c[idx%len(c)] == ans:
            score[2] += 1
    
    max_val = max(score)
    
    for idx, val in enumerate(score):
        if max_val == val:
            answer.append(idx+1)
            
    return answer