[프로그래머스] 모의고사 (Python) - 완전탐색

Yebin Lee·2022년 7월 5일
0

코테준비

목록 보기
3/12

어제 새벽에 프로그래머스 업데이트가 되더니 메인 홈페이지가 바뀌었다...!
코딩테스트를 준비하며 문제를 푸는 곳은 도메인마저 변경되었다 ❗

리프레시 느낌으로다가 스킬체크 라는 것을 풀어봤다. 내가 풀어본 레벨 1은 제한 시간 40분 내에 2문제를 풀면 되는 거였다. 다행히 쉬운 문제가 나와서 40분 내에 풀 수 있었다.

모의고사는 그 중 첫번째 문제다.


프로그래머스 [모의고사] 문제 보기


사실 문제 하나당 20분을 잡고 풀다보니 정확도에 초점을 맞추느라 코드를 효율적으로 구현하지는 못했다. 더군다나 아직 파이썬 익숙치 않아 자꾸 C++ 문법이 떠올라 조금 애먹었던 것 같다.


프로그래머스 [모의고사] 문제 풀이


def solution(answers):
    answer = []
    student1 = [1,2,3,4,5]
    student2 = [2,1,2,3,2,4,2,5]
    student3 = [3,3,1,1,2,2,4,4,5,5]
    check1=0
    check2=0
    check3=0
    max=0
    for i in range(len(answers)):
        if answers[i]==student1[i%5]:
            check1+=1
            if(max<check1):
                max=check1
        if answers[i]==student2[i%8]:
            check2+=1
            if(max<check2):
                max=check2
        if answers[i]==student3[i%10]:
            check3+=1
            if(max<check3):
                max=check3
    if max==check1:
        answer.append(1)
    if max==check2:
        answer.append(2)
    if max==check3:
        answer.append(3)
    return answer

굉장히 비효율적인 코드라 생각했는데 엄청나게 다른 방법이 있는 문제는 아니었다. 다른 사람들의 풀이를 보면서 check1, check2, check3을 배열로 바꿔주면 코드가 훨씬 편하겠다는 깨달음을 얻었다.

배워볼만한 점은 enumerate 를 사용해 max 값에 따라 answer을 출력해주는 방식이다. 또한, max 값을 출력해주는 함수를 따로 사용하면 된다.

코드를 다음과 같이 바꿔보았다.


def solution(answers):
    answer = []
    student1 = [1,2,3,4,5]
    student2 = [2,1,2,3,2,4,2,5]
    student3 = [3,3,1,1,2,2,4,4,5,5]
    check = [0, 0, 0]
    for i in range(len(answers)):
        if answers[i]==student1[i%5]:
            check[0]+=1
        if answers[i]==student2[i%8]:
            check[1]+=1
        if answers[i]==student3[i%10]:
            check[2]+=1
    for i, maximum in enumerate(check):
        if maximum == max(check):
            answer.append(i+1)
    return answer

📢 enumerate 란?

보통 for문과 함께 쓰인다.

list가 있는 경우 순서와 list 값을 전달하는 기능을 가진 함수다.

그 말은 즉슨, 순서(key 혹은 index)를 나타낼 값과 실제 데이터 값(data 혹은 value)을 나타낼 값 이렇게 두 개의 인자(내 코드의 경우 i 와 maximum)가 필요하다는거겠지?


이 문제는 딱 20분만에 풀었다. (다음 문제는 4분만에 풀었지만 ㅎㅎ)

두 문제를 다 풀고 나면 스킬 레벨 배지를 준다.
정말 별건 아니지만 그래도 100점을 보니까 기분이 좋아서 ㅎㅎ 자주 도전해봐야지...!

이만 다음 포스팅 쓰러 가야지 ... 총총 ~~..


안녕 !

0개의 댓글