코딩코딩

[프로그래머스] level1 - 모의고사 : 파이썬(Python) 풀이

Jerry Jun 2020. 12. 24. 11:45
728x90

문제

프로그래머스 level1 모의고사 문제

 

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

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

programmers.co.kr

코드

def solution(answers):
    answerss = []; answer = []
    a = [1,2,3,4,5]; count_a = 0; a_a = 0
    b = [2,1,2,3,2,4,2,5]; count_b = 0; b_b = 0
    c = [3,3,1,1,2,2,4,4,5,5]; count_c = 0; c_c = 0
    for i in range(len(answers)):
        if(a[a_a] == answers[i]):
            count_a += 1
        if(b[b_b] == answers[i]):
            count_b += 1
        if(c[c_c] == answers[i]):
            count_c += 1
        a_a += 1
        b_b += 1
        c_c += 1
        if(len(a) == a_a):
                a_a = 0
        if(len(b) == b_b):
                b_b = 0
        if(len(c) == c_c):
                c_c = 0
    answerss.append(count_a)
    answerss.append(count_b)
    answerss.append(count_c)
    if(len(set(answerss)) == 1):
        answer = [1,2,3]
    elif(len(set(answerss)) == 2):
        answer.append(answerss.index(max(answerss))+1)
        answerss[answerss.index(max(answerss))] = 0
        if(max(answerss) !=0):
            answer.append(answerss.index(max(answerss))+1)
    else:
        answer.append(answerss.index(max(answerss))+1)
    return answer

코드풀이

파이썬을 잘 모를 때 풀었던 문제라 무식(?)하게 풀었는지 변수가 많고 코드가 길어보인다. 혹시나 이 문제에 대해 어려움을 겪는 분이 보게 된다면 힌트만 얻어갔으면 좋겠다.

 

이 문제는 3가지의 답안 마킹 유혀이 있고 정답 배열이 주어진다.

그래서 나는 a, b, c 유형의 답안 마킹 유형을 배열로 선언했고 답안 배열 answers 가 주어졌을 때 answers 의 길이만큼 반복문을 돌려 마킹 유형과 맞으면 count 를 통해 맞힌 개수를 계산하였다.

 

answers 보다 마킹 유형의 길이가 클 때는 다시 인덱스를 0으로 초기화하며 끝까지 계산을 마쳤다. 그리고 각 마킹 유형을 마친 개수를 중복 체크 하여 최대값을 찾기 시작했다. 만약 모두 중복 시에는 3가지의 유형이 동일한 점수이니 [1,2,3] 을 반환한다. 중복을 제외한 값이 2개라면 최대값을 찾게 되고, 만약 3개라면 가장 큰 최대값을 찾으면 완성한다.

 

모의고사_인증사진
프로그래머스 표지

300x250