프로그래머스 : 코딩테스트 연습 - 완전탐색 - 모의고사

문제

  • 프로그래머스 : 코딩테스트 연습 - 완전탐색 - 모의고사

예전 풀이

코딩 공부 처음 시작했을때 풀이.

def solution(answers):
    lenans = len(answers)
    giveups = [
        [1, 2, 3, 4, 5],
        [2, 1, 2, 3, 2, 4, 2, 5],
        [3, 3, 1, 1, 2, 2, 4, 4, 5, 5],
    ]

    results = []
    for giveup in giveups:
        picks = giveup * (lenans // len(giveup) + 1)
        result = 0
        for i in range(lenans):
            result += 1 if picks[i] == answers[i] else 0
        results.append(result)

    answer = []
    winner = max(results)
    i = 1
    for result in results:
        if result == winner:
            answer.append(i)
        i += 1
    return answer

이건 오늘 새로 푼 풀이. 코드가 좀 더 깔끔해지긴 했는데 전체 구조는 얼추 비슷하게 푼 것 같다. 다른 사람들이 푼 풀이도 봤는데 이중 for 문 대신 answer_types 를 리스트 3개로 나누어서 for문 하나에서 if문 세개로 처리한 사람도 있었다. if문으로 처리하는게 더 빠르겠지만 난 이중 포문으로 하는 게 더 깔끔해 보여서 이렇게 함.

def solution(answers):
    answer_types = [
        [1, 2, 3, 4, 5],
        [2, 1, 2, 3, 2, 4, 2, 5],
        [3, 3, 1, 1, 2, 2, 4, 4, 5, 5],
    ]

    scores = [0, 0, 0]
    for type_idx, ans_type in enumerate(answer_types):
        ans_type_len = len(ans_type)
        for idx, ans in enumerate(answers):
            if ans == ans_type[idx % ans_type_len]:
                scores[type_idx] += 1

    max_score = max(scores)
    return [idx + 1 for idx, score in enumerate(scores) if score == max_score]