https://programmers.co.kr/learn/courses/30/lessons/42840
리스트의 요소들의 인덱스와 값을 돌려주는 enumerate함수와 리스트와 리스트를 차례대로 튜플형태로 붙여 돌려주는 zip함수를 사용하여 풀었다.
def solution(answers):
# 1,2,3번의 답안 유형을 answers 길이에 각자 리스트(패턴)의 길이로 나눈 값만큼 반복하여 리스트 생성
# 답안 길이가 각 리스트의 길이보다 작을 경우, 0번 반복될 경우를 방지하기 위해 1을 더함
one= [1,2,3,4,5]; two= [2,1,2,3,2,4,2,5]; three= [3,3,1,1,2,2,4,4,5,5]
leng= len(answers)
# zip으로 학생들의 답안과 답지의 답안을 순서대로 zip함수로 묶음
one= list(zip(one * (leng//5 +1), answers)); two= list(zip(two * (leng//8 +1), answers)); three= list(zip(three * (leng//10 +1), answers))
# 만일 튜플의 첫번째 요소(학생답안)과 두번째 요소(답지)가 같으면 result요소에 1씩 더함
result=[0,0,0]
for i in range(leng):
if one[i][0]==one[i][1]: result[0] += 1
if two[i][0]==two[i][1]: result[1] += 1
if three[i][0]==three[i][1]: result[2] += 1
# result리스트의 값 중 최대가 되는 값의 인덱스와 같은 인덱스들에 1을 더해 리스트로 반환
return [i+1 for i, value in enumerate(result) if value == max(result)]
return 문 부분에서 인덱스 값을 돌려줄 때 enumerate말고도 filter함수를 사용하여 다음과 같이 구현할 수도 있다.
list(filter(lambda x: result[x] == max(result), range(len(result))))
하지만 이 경우엔 각 인덱스 값에 1씩 더해주는 연산식을 적용하기 복잡하여 list comprehension을 사용하여 풀었다.
'python > 알고리즘 문제풀이' 카테고리의 다른 글
[프로그래머스 | 파이썬3] 소수 만들기_combinations활용 (2) | 2021.05.17 |
---|---|
[프로그래머스 | 파이썬3] 음양더하기_ 기본연산식, sum함수 사용 (2) | 2021.05.15 |
[프로그래머스 | 파이썬3] 체육복_ set, pop 사용 (1) | 2021.05.13 |
[프로그래머스 | python3] K번째 수_ sort() 사용 (2) | 2021.05.12 |
[프로그래머스 | python3] 완주하지 못한 선수 (1) | 2021.05.11 |