알고리즘/프로그래머스

[프로그래머스] 모의고사 for Python

정석이 2022. 4. 9. 23:36

https://programmers.co.kr/learn/courses/30/lessons/42840

 

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

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

programmers.co.kr

 

 

 

 


 

모의고사 문제 다시풀었다.

 

def solution(answers):
    answer = []
    math1 = [1, 2, 3, 4, 5]
    math2 = [2, 1, 2, 3, 2, 4, 2, 5]
    math3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    
    m1 = 0
    m2 = 0
    m3 = 0
    
    for i in range(len(answers)):
        if math1[i % 5] == answers[i]:
            m1 += 1
        if math2[i % 8] == answers[i]:
            m2 += 1
        if math3[i % 10] == answers[i]:
            m3 += 1
    
    ans_max = max(m1,m2,m3)
    if ans_max == m1:
        answer.append(1)
    if ans_max == m2:
        answer.append(2)
    if ans_max == m3:
        answer.append(3)
        
    return answer

 

 

자바로 풀었을 때와 다름없는 구린 코드 ㅋ 아마 똑같을듯

 

 

그래서 포스팅 안하려다가 다른 사람 풀이 보고 포스팅한다.

 

 


 

다른 사람 풀이

 

 

 

 

 

파이썬에서는 for문 대신 enumerate를 사용할 수 있다.

 

 

저거는 인덱스랑 저 안 리스트 값이랑 매핑해주는거임

 

그래서 for i, in_list in enumerate(list):

 

이런식으로 써주면 i가 인덱스, in_list가 리스트 안에 있는 값이 된다.

 

 

+ for i, in_list in enumerate(list, start = 100):

 

이라고 해주면 인덱스가 100부터 시작하게 할 수도 있음

 

 

아무튼 내가 for i in range(len(answers)) 로 answers 안의 인덱스 값을 i로 정해준 것처럼

 

저분은 enumerate로 인덱스 생성했다.

 

 

그리고 나는 변수 3개를 만들어서 맞춘 개수 +1씩 하고 일케 했는데 

 

이분은 맞추면 score라는 리스트 각 인덱스 자리에 +1 하고

 

 

score의 max값이 score안에 있는 값과 같으면 answer에 append하는 식으로...! 했다. 이것도 아주 기발한듯 하하

 

 

 

 

그리고

 

 

이분처럼 마지막 줄에 

 

   return [i + 1 for i, v in enumerate(s) if v == max(s)]

 

이렇게 한줄로 리턴해줄 수도 있다.!  인덱스를 출력할거라서 +1 해서 출력 갈김