본문 바로가기
Python/코테 연습

모의고사

by soojitasan 2024. 10. 7. 15:18
## 🔒 문제. 모의고사

def solution(answers):
    answer = []
    pro_num = len(answers)
    
    cnt1 = 0
    cnt2 = 0
    cnt3 = 0
    
    pattern1 = [1,2,3,4,5] ## 1번 수포자 : 1, 2, 3, 4, 5 반복
    pattern2 = [2,1,2,3,2,4,2,5] ## 2번 수포자 : 21, 23, 24, 25 반복
    pattern3 = [3,3,1,1,2,2,4,4,5,5] ## 3번 수포자 : 33, 11, 22, 44, 55 반복
    
    ## 1번 답
    if pro_num > 5:
        answer1 = (pattern1 * (pro_num // len(pattern1))) + (pattern1 * (pro_num % len(pattern1)))
    else:
        answer1 = pattern1[0:pro_num+1]

    ## 2번 답
    if pro_num > 8:
        answer2 = (pattern2 * (pro_num // len(pattern2))) + (pattern2 * (pro_num % len(pattern2)))
    else:
        answer2 = pattern2[0:pro_num+1]
    
    ## 3번 답
    if pro_num > 10:
        answer3 = (pattern3 * (pro_num // len(pattern3))) + (pattern3 * (pro_num % len(pattern3)))
    else:
        answer3 = pattern3[0:pro_num+1]
        

    for idx, val in enumerate(answers):
        if answer1[idx] == val:
            cnt1 += 1

        if answer2[idx] == val:
            cnt2 += 1
        
        if answer3[idx] == val:
            cnt3 += 1
            
    max_val = max([cnt1, cnt2, cnt3])
    
    for idx, val in enumerate([cnt1, cnt2, cnt3]):
        if val == max_val:
            answer.append(idx+1)
    
    return answer

 

 

- 문제 접근

1) 수포자 1, 2, 3이 찍는 방식의 패턴 파악 (pattern1, 2, 3)

2) 수포자 1, 2, 3이 실제 입력한 답안을 리스트로 저장 (answer1, 2, 3)

3) answers와 비교하며 정답 갯수를 리스트로 저장 (cnt1, 2, 3)

4) 정답 갯수의 최댓값 추출하여(max_val) 그 값과 동일하게 정답이 나온 수포자를 answer에 저장

 

- 책 풀이 보고 든 생각

변수 갯수를 줄여 효율성을 증가시키는 방법 고민하기 (ex. pattern1, 2,3을 patterns 한개의 변수로 표현)