상세 컨텐츠

본문 제목

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

알고리즘 공부

by 독서와 여행 2021. 3. 23. 22:33

본문

일단 이렇게 풀었다. 너무 난잡해 보여서 다른 사람들의 코드를 한 번 봐야지일단 이렇게 풀었다. 너무 난잡해 보여서 다른 사람들의 코드를 한 번 봐야지

def solution(answers):
    solve = []
    one = 0
    two = 0
    three = 0
    one_list = [1,2,3,4,5]
    two_list = [2,1,2,3,2,4,2,5]
    three_list = [3,3,1,1,2,2,4,4,5,5]
    
    for i in range(len(answers)):
        if answers[i] == one_list[i%5]:
            one += 1
        if answers[i] == two_list[i%8]:
            two += 1
        if answers[i] == three_list[i%10]:
            three += 1
    
    sample = [one, two, three]
    max_index = max(sample)
    for i in range(0,3):
        if sample[i] == max_index:
            solve.append(i + 1)
    
            
    return solve

 

그냥 대부분 동일하게 풀었구나.... 아래는 깔끔히 정리한 코드다. 기본 로직은 같다.  코드는 깔끔한데 이해하는데는 

그렇게 깔끔하지는 않은듯.

 

그래도 이렇게도 풀 수 있구나를 좀 배웠다. 이해는 되지만 직접 구현하라고 하면 조금은 어려울듯

 

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):  # answers 인덱스 번호와 같이 for
        for i, v in enumerate(p): #p 1, 2, 3 다 검사함
            if a == v[q % len(v)]: # 수포자 1번, 2번 3번 인덱스 모두 정답과 맞는지 확인
                s[i] += 1 # 1,2,3 번 사람들 정답이면 s에 그 해당하는 인덱스 정답수 ++
    return [i + 1 for i, v in enumerate(s) if v == max(s)] #최대값 찾아서 거기서 맞은 인덱스 +1 을 정답으로 제출

 

 

관련글 더보기

댓글 영역