본문 바로가기

Coding Test/Programmers

[프로그래머스/파이썬] 모의고사

728x90

 

나의 풀이

def solution(answers):
    list1 = [1, 2, 3, 4, 5] * 2000
    list2 = [2, 1, 2, 3, 2, 4, 2, 5] * 1250
    list3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] * 1000
    score = [0, 0, 0]
    answer = []

    for i in range(10000):
        try:
            if list1[i] == answers[i]:
                score[0] += 1
            if list2[i] == answers[i]:
                score[1] += 1
            if list3[i] == answers[i]:
                score[2] += 1
        except:
            break

    for i, p in enumerate(score):
        if p == max(score):
            answer.append(i+1)

    return answer

 

%를 이용한 풀이

def solution(answers):
    pattern1 = [1,2,3,4,5]
    pattern2 = [2,1,2,3,2,4,2,5]
    pattern3 = [3,3,1,1,2,2,4,4,5,5]
    score = [0, 0, 0]
    result = []

    for idx, answer in enumerate(answers):
        if answer == pattern1[idx%len(pattern1)]:
            score[0] += 1
        if answer == pattern2[idx%len(pattern2)]:
            score[1] += 1
        if answer == pattern3[idx%len(pattern3)]:
            score[2] += 1

    for idx, s in enumerate(score):
        if s == max(score):
            result.append(idx+1)

    return result

 

 

 

enumerate를 다수 활용한 풀이

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 q, a in enumerate(answers):
        for i, v in enumerate(p):
            if a == v[q % len(v)]:
                s[i] += 1
    return [i + 1 for i, v in enumerate(s) if v == max(s)]

 

 

cycle과 numpy를 이용한 풀이

from itertools import cycle
import numpy as np
def solution(answers):
    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]
    seq = zip(cycle(p1), cycle(p2), cycle(p3))
    res = np.zeros(3)
    for sol in answers:
        tmp = np.array(next(seq))
        res[tmp==sol] += 1

    cnt = np.count_nonzero(res[res==res.max()])
    if not cnt:
        return []

    res = res.argsort()+1
    return list(res[3-cnt:])

 

반응형