Algorithm/프로그래머스

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

poppy 2021. 5. 15. 12:08
반응형

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

 

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

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

programmers.co.kr

def solution(answers):
    person1 = [1,2,3,4,5]
    person2 = [2,1,2,3,2,4,2,5]
    person3 = [3,3,1,1,2,2,4,4,5,5]
    score = [0,0,0]
    answer = []
    
    # 맞은 개수 계산
    for i in range(len(answers)):
        if answers[i] == person1[i % len(person1)]: score[0] += 1
        if answers[i] == person2[i % len(person2)]: score[1] += 1
        if answers[i] == person3[i % len(person3)]: score[2] += 1
          
    maxScore = max(score) # 가장 많이 맞은 개수
    
    # 가장 많이 맞은 사람 계산
    for i in range(len(score)):
        if score[i] == maxScore: answer.append(i+1)
    
    return answer

이 문제는 완전탐색 문제이기 때문에 모든 배열을 돌면서 몇 개를 맞았는지 계산해야하는 문제였습니다.

맞은 개수를 계산하기 위해 정답(answer)과 세 사람의 답을 비교해서 같으면 점수에 +1를 해주었습니다. 세 사람의 답이 일정한 패턴을 반복하기 때문에 답과 맞는지 계산하려면 i % len(person1) 하는 것이 중요했습니다. 맞은 개수 계산이 다 끝나면 max()를 사용하여 가장 많이 맞은 개수를 계산합니다. 그 다음 다시 for문을 돌면서 가장 많이 맞은 사람을 계산합니다. 이 때 사람은 1부터 시작하므로 i+1를 해줘야 답이 정상적으로 출력됩니다.

반응형