ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 9. 모의고사
    Programmers 2023. 6. 15. 15:32
    728x90

    문제 설명

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

    1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
    2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
    3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...

    1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.

    제한 조건
    • 시험은 최대 10,000 문제로 구성되어있습니다.
    • 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
    • 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.

    def solution(answers):
        answer = [0,0,0]
        p1 = [1,2,3,4,5]
        p2 = [2,1,2,3,2,4,2,5]
        p3 = [3,3,1,1,2,2,4,4,5,5]
        
        for i in range(len(answers)):
        	# 1의 패턴 채점 결과
            if answers[i] == p1[i%len(p1)]:
                answer[0] += 1
            # 2의 패턴 채점 결과
            if answers[i] == p2[i%len(p2)]:
                answer[1] += 1
            # 3의 패턴 채점 결과
            if answers[i] == p3[i%len(p3)]:
                answer[2] += 1
    
        return [i + 1 for i in range(3) if answer[i] == max(answer)]

    나눗셈 연산을 활용한 인덱싱을 통해 IndexError가 나지 않게끔 구현하였고, 마지막 return 문에는 편의상 3을 썼지만 더 효율적으로 코드를 작성하려면 for i  in range(len(answer)) 가 들어가면 된다.

    728x90

    'Programmers' 카테고리의 다른 글

    11. JadenCase 문자열 만들기  (0) 2023.06.16
    10. 소수 찾기  (0) 2023.06.15
    8. 문자열 내 마음대로 정렬하기  (0) 2023.06.15
    7. 숫자 문자열과 영단어  (0) 2023.06.14
    6.예산  (0) 2023.06.14
Designed by Tistory.