프로그래머스_모의고사

임정민·2023년 11월 23일
0

알고리즘 문제풀이

목록 보기
129/173
post-thumbnail

프로그래머스 Lv1 문제입니다. 실전에 대비하기 위해 30분 시간제한을 두고 풀었습니다.

문제

https://school.programmers.co.kr/learn/courses/30/lessons/42840

[나의 풀이]

⌛ 25분


from collections import Counter
from itertools import cycle

def solution(answers):
    
    answer = []
    len_answers = len(answers)
    res = {str(i):0 for i in range(1,4)}
    
    ans_1 = [1,2,3,4,5] # (5개)
    ans_2 = [2,1,2,3,2,4,2,5] # (7개)
    ans_3 = [3,3,1,1,2,2,4,4,5,5] # (10개)
    
    cnt = 0
    for ans1,ans2,ans3 in zip(cycle(ans_1),cycle(ans_2),cycle(ans_3)):
        
        if cnt==len_answers:
            break
        
        if answers[cnt%len_answers]==ans1:
            res['1'] += 1
        if answers[cnt%len_answers]==ans2:
            res['2'] += 1
        if answers[cnt%len_answers]==ans3:
            res['3'] += 1
        cnt += 1
    
    most_v = Counter(res).most_common()[0][1]
    for k,v in Counter(res).most_common():
        
        if v==most_v:
            answer.append(int(k))
    
    answer.sort()

    return answer

완전탐색 문제입니다. 구현하는 것 자체는 어렵지 않았지만 최대한 간결히 표현하기 위해 노력해본 풀이입니다.🐤🐤🐤

1,2,3번 수포자별로 문제를 찍는 방식이 다르기 때문에 zip() 함수안에 cycle() 객체로 변환시켜 for문을 돌렸습니다. 이때, 문제 갯수만큼 실행하고 break하였습니다.

또한 정답을 가장 많이 맞춘 수포자를 고르기 위해 Counter 객체의 most_common()함수를 활용하였습니다.

[다른 사람의 풀이1]


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

% 나머지함수와 인덱싱으로 모의고사 정답(answers)별 수포자들이 답을 체크한 풀이입니다.

[다른 사람의 풀이2]


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)]

모의고사 정답과 수포자들의 정답을 2중 for문으로 돌며 해결한 풀이입니다.🐆🐆🐆

감사합니다.

profile
https://github.com/min731

0개의 댓글