Today
Total
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
관리 메뉴

기억은 짧고 기록은 길다

[프로그래머스/Programmers] 모의고사 - Python 본문

CodingTest/programmers

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

ukunV 2021. 8. 11. 20:25

Link

 

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

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

programmers.co.kr

Solution

매번 코딩테스트를 풀때 단계별로 나누어 푸는 것이 좋다고 생각한다.

이번 문제에서는 각각 정답이 맞았을 때의 개수를 세기 위한 코드를 먼저 작성하였다.

for i in range(len(answer)):
        if answer[i] == p1[i]:
            count[0] += 1
        if answer[i] == p2[i]:
            count[1] += 1
        if answer[i] == p3[i]:
            count[2] += 1

이와 같이 코드를 작성한 후 어떻게 하면 다른 정답지들의 길이에 대해 비교할 수 있을까 생각하였고 그 결과 %를 사용하여 나머지를 이용하면 좋겠다는 생각을 하게 되며 문제를 해결하였다.

def solution(answer):

    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]

    count = [0, 0, 0]

    for i in range(len(answer)):
        if answer[i % len(p1)] == p1[i]:
            count[0] += 1
        if answer[i % len(p2)] == p2[i]:
            count[1] += 1
        if answer[i % len(p3)] == p3[i]:
            count[2] += 1


    return [i + 1 for i in range(3) if count[i] == max(count)]
🔑 key point: answer[i % len(p)]
📌 Tip: enumerate()

Other Solution

def solution(answers):

    p = [[1, 2, 3, 4, 5],
         [2, 1, 2, 3, 2, 4, 2, 5],
         [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]]

    s = [0] * len(p)

    for i, j in enumerate(answers):
        for m, n in enumerate(p):
            if j == n[m % len(n)]:
                s[m] += 1

    return [i + 1 for i, v in enumerate(s) if v == max(s)]
Comments