[프로그래머스 / Level 1] 모의고사 (파이썬) 완전탐색

khyojun·2022년 7월 19일
0

코테연습

목록 보기
7/21

📌문제 설명

📌제한 사항

  • 시험은 최대 10,000 문제로 구성되어있습니다.
  • 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
  • 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.

📌 Solution
이번 문제는 완전탐색으로 처음부터 다같이 계속 돌면 되는 문제인데 다만 고려해야할 점이 1,2,3번 수포자가 찍는 패턴의 길이가 다 다르다는 점이다. 이것의 순환주기마다 다시 돌려줄 필요가 있다. -> 이렇게 안해주면 런타임 에러가 걸린다.

def solution(answers):
    answer = []
    num1=[1,2,3,4,5]
    num2=[2,1,2,3,2,4,2,5]
    num3=[3,3,1,1,2,2,4,4,5,5]
    maxi=0
    cnt_1=0
    cnt_2=0
    cnt_3=0
    
    index1=0
    index2=0
    index3=0
    for i in range(len(answers)):
        
        if index1>=len(num1):
            index1=0
        if index2>=len(num2):
            index2=0
        if index3>=len(num3):
            index3=0
             
        if num1[index1]==answers[i]:
            cnt_1+=1
        if num2[index2]==answers[i]:
            cnt_2+=1
        if num3[index3]==answers[i]:
            cnt_3+=1
        
        index1+=1
        index2+=1
        index3+=1
        
        maxi=max(cnt_1, cnt_2, cnt_3) 
    
    if maxi==cnt_1:
        answer.append(1)
    
    if maxi==cnt_2:
        answer.append(2)
    
    if maxi==cnt_3:
        answer.append(3)
    
    return answer


위와 같은 코드로 순환주기를 맞춰주긴 하였지만 다른 분들의 풀이를 보니 %연산을 이용하여서 순환주기를 맞춰주는 작업을 하였다는 것을 알 수 있었다.

def solution(answers):
    answer = []
    num1=[1,2,3,4,5]
    num2=[2,1,2,3,2,4,2,5]
    num3=[3,3,1,1,2,2,4,4,5,5]
    maxi=0
    cnt_1=0
    cnt_2=0
    cnt_3=0
    
    
    for i in range(len(answers)):
        if num1[i%len(num1)]==answers[i]:
            cnt_1+=1
        if num2[i%len(num2)]==answers[i]:
            cnt_2+=1
        if num3[i%len(num3)]==answers[i]:
            cnt_3+=1
        maxi=max(cnt_1, cnt_2, cnt_3)
    
    if maxi==cnt_1:
        answer.append(1)
    
    if maxi==cnt_2:
        answer.append(2)
    
    if maxi==cnt_3:
        answer.append(3)
    
    return answer

다음이 2번째 버전이다. 확실히 짧아지고 가독성이 좋아진 부분이 있는데 다음부터 문제들 중 순환주기에 따라 문제를 해결해야할 때가 있을때 %연산을 잘 활용해봐야겠다.

문제 해결하며 알게 된 점

  1. % 연산 활용하여 순환주기 맞춰주기
profile
코드를 씹고 뜯고 맛보고 즐기는 것을 지향하는 개발자가 되고 싶습니다

0개의 댓글